前端常见知识点一之HTTP
大半年沒(méi)更新了,一直忙,公司也沒(méi)有外網(wǎng),這次找些材料整理復(fù)習(xí)鞏固一下。資料來(lái)源于網(wǎng)絡(luò)。
這里寫目錄標(biāo)題
- 一、HTTP與HTTPS
- 1.http和https基本概念
- 2.http和https的區(qū)別
- 3.https協(xié)議的工作原理
- 4.http協(xié)議的優(yōu)點(diǎn)
- 5.http協(xié)議的缺點(diǎn)
- 6.TCP三次握手、四次揮手
- 7.TCP和UDP的區(qū)別
- 8. 網(wǎng)絡(luò)七層模型
- 9.HTTP請(qǐng)求方式
- 10. HTTP2.0
- 11. 400和401、403狀態(tài)碼
- 12.HTTP狀態(tài)碼
- 13.http常用請(qǐng)求頭
- 14.強(qiáng)、協(xié)商緩存
- 15.GET和POST的區(qū)別
- 16.常見(jiàn)的HTTP頭部
一、HTTP與HTTPS
1.http和https基本概念
http: 超文本傳輸協(xié)議,是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,是一個(gè)客戶端和服務(wù)器請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(tcp),用于從WWW服務(wù)器傳輸超文本到瀏覽器的傳輸協(xié)議,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。
https: 是以安全為目標(biāo)的http通道,簡(jiǎn)單的講是http的安全版,即http下加入ssl層,http的安全基礎(chǔ)是ssl,因此加密的詳細(xì)內(nèi)容就需要ssl。
https協(xié)議的主要作用是:建立一個(gè)信息安全通道,來(lái)確保數(shù)組的傳輸,確保網(wǎng)站的真實(shí)性
2.http和https的區(qū)別
http傳輸?shù)臄?shù)據(jù)都是未加密的,也是明文的,網(wǎng)景公司設(shè)置了SSL協(xié)議來(lái)對(duì)http協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密處理,簡(jiǎn)單來(lái)說(shuō)https協(xié)議是有http和ssl協(xié)議構(gòu)建的可進(jìn)行加密傳輸和身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議的安全性更高。 區(qū)別:
3.https協(xié)議的工作原理
客戶端在使用https方式與Web服務(wù)器通信時(shí)有以下幾個(gè)步驟:
4.http協(xié)議的優(yōu)點(diǎn)
使用https協(xié)議可認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器。
https協(xié)議是由http+ssl協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,要比http協(xié)議安全,可防止數(shù)據(jù)在傳輸?shù)倪^(guò)程中不被竊取、改變,確保數(shù)據(jù)的完整性。
https是現(xiàn)行框架下最安全的解決方案,雖然不是絕對(duì)的安全,但它大幅增加了中間人攻擊的成本。
比起同等http網(wǎng)站,采用https加密的網(wǎng)站在搜索中的排名將會(huì)更高。
5.http協(xié)議的缺點(diǎn)
https握手階段比較費(fèi)時(shí),會(huì)使頁(yè)面加載時(shí)間延長(zhǎng)50%,增加費(fèi)電。
https緩存不如http高效,會(huì)增加數(shù)據(jù)開(kāi)銷。
ssl證書也需要錢,功能越強(qiáng)大的證書費(fèi)用更高。
ssl證書需要綁定ip,不能在同ip上綁定多個(gè)域名,ipv4資源支持不了這種消耗。
6.TCP三次握手、四次揮手
三次握手的本質(zhì)是確認(rèn)通信雙方收發(fā)數(shù)據(jù)的能力:
首先,我讓信使運(yùn)輸一份信件給對(duì)方,對(duì)方收到了,那么他就知道了我的發(fā)件能力和他的收件能力是可以的。
于是他給我回信,我若收到了,我便知我的發(fā)件能力和他的收件能力是可以的,并且他的發(fā)件能力和我的收件能力是可以。
然而此時(shí)他還不知道他的發(fā)件能力和我的收件能力到底可不可以,于是我最后回饋一次,他若收到了,他便清楚了他的發(fā)件能力和我的收件能力是可以的。
- 第一次握手:客戶端要向服務(wù)端發(fā)起連接請(qǐng)求,并發(fā)送報(bào)文;
- 第二次握手:服務(wù)端收到客戶端發(fā)過(guò)來(lái)的報(bào)文,并給客戶端回復(fù)可以建立連接
- 第三次握手:客戶端收到服務(wù)端的回復(fù)后,知道了服務(wù)端同意了這次連接,然后客戶端再回復(fù)一段報(bào)文給服務(wù)端建立連接;
四次揮手的目的是關(guān)閉一個(gè)連接
- 第一次揮手:當(dāng)客戶端的數(shù)據(jù)都傳輸完成后,客戶端向服務(wù)端發(fā)出連接釋放報(bào)文
- 第二次揮手:服務(wù)端收到客戶端發(fā)的報(bào)文后給客戶端回復(fù)確認(rèn)報(bào)文,此時(shí)服務(wù)端處于關(guān)閉等待狀態(tài),因?yàn)榉?wù)端可能還有數(shù)據(jù)沒(méi)發(fā)完
- 第三次揮手:服務(wù)端將最后數(shù)據(jù)(比如50個(gè)字節(jié))發(fā)送完畢后就向客戶端發(fā)出連接釋放報(bào)文
- 第四次揮手:客戶端收到服務(wù)端發(fā)的FIN報(bào)文后,向服務(wù)端發(fā)出確認(rèn)報(bào)文,服務(wù)端收到確認(rèn)報(bào)文釋放連接。
注意客戶端發(fā)出確認(rèn)報(bào)文后不是立馬釋放TCP連接,而是要經(jīng)過(guò)2MSL(最長(zhǎng)報(bào)文段壽命的2倍時(shí)長(zhǎng))后才釋放TCP連接。而服務(wù)端一旦收到客戶端發(fā)出的確認(rèn)報(bào)文就會(huì)立馬釋放TCP連接,所以服務(wù)端結(jié)束TCP連接的時(shí)間要比客戶端早一些。
想了解更清楚請(qǐng)移步該文章:《臥槽!牛皮了,頭一次見(jiàn)有大佬把TCP/IP三次握手四次揮手解釋的這么明白》
7.TCP和UDP的區(qū)別
UDP沒(méi)有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用,如IP電話,實(shí)時(shí)視頻會(huì)議等);
那HTTP和TCP之間又有什么樣的關(guān)系?那我們先來(lái)了解一下網(wǎng)絡(luò)七層模型(OSI):
8. 網(wǎng)絡(luò)七層模型
- 物理層:
物理層負(fù)責(zé)最后將信息編碼成電流脈沖或其它信號(hào)用于網(wǎng)上傳輸;
eg:RJ45等將數(shù)據(jù)轉(zhuǎn)化成0和1 - 數(shù)據(jù)鏈路層:
數(shù)據(jù)鏈路層通過(guò)物理網(wǎng)絡(luò)鏈路供數(shù)據(jù)傳輸。不同的數(shù)據(jù)鏈路層定義了不同的網(wǎng)絡(luò)和協(xié) 議特征,其中包括物理編址、網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、錯(cuò)誤校驗(yàn)、數(shù)據(jù)幀序列以及流控;
可以簡(jiǎn)單的理解為:規(guī)定了0和1的分包形式,確定了網(wǎng)絡(luò)數(shù)據(jù)包的形式; - 網(wǎng)絡(luò)層
網(wǎng)絡(luò)層負(fù)責(zé)在源和終點(diǎn)之間建立連接;
可以理解為,此處需要確定計(jì)算機(jī)的位置,怎么確定?IPv4,IPv6! - 傳輸層
傳輸層向高層提供可靠的端到端的網(wǎng)絡(luò)數(shù)據(jù)流服務(wù)。
可以理解為:每一個(gè)應(yīng)用程序都會(huì)在網(wǎng)卡注冊(cè)一個(gè)端口號(hào),該層就是端口與端口的通信!常用的(TCP/IP)協(xié)議; - 會(huì)話層
會(huì)話層建立、管理和終止表示層與實(shí)體之間的通信會(huì)話;
建立一個(gè)連接(自動(dòng)的手機(jī)信息、自動(dòng)的網(wǎng)絡(luò)尋址); - 表示層:
表示層供多種功能用于應(yīng)用層數(shù)據(jù)編碼和轉(zhuǎn)化,以確保以一個(gè)系統(tǒng)應(yīng)用層發(fā)送的信息 可以被另一個(gè)系統(tǒng)應(yīng)用層識(shí)別;
可以理解為:解決不同系統(tǒng)之間的通信,eg:Linux下的QQ和Windows下的QQ可以通信 - 應(yīng)用層:
OSI 的應(yīng)用層協(xié)議包括文件的傳輸、訪問(wèn)及管理協(xié)議(FTAM) ,以及文件虛擬終端協(xié)議(VIP)和公用管理系統(tǒng)信息(CMIP)等;
規(guī)定數(shù)據(jù)的傳輸協(xié)議
參考移步:《深入淺出-網(wǎng)絡(luò)七層模型》
9.HTTP請(qǐng)求方式
get,head,post,put,delete,connect,options,trace
- get:請(qǐng)求指定頁(yè)面信息,并返回實(shí)體主體;
- head:類似于get請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭;
- post:向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。post請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立或已有資源的修改;
- put:從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定資源內(nèi)容;
- delete:請(qǐng)求服務(wù)器刪除指定的頁(yè)面;
- connect:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器;
- options:允許客戶端查看服務(wù)器的性能;
- trace:回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷
10. HTTP2.0
- 與http相比較,提升了訪問(wèn)速度,請(qǐng)求資源所需的時(shí)間更少
- 內(nèi)容安全,因?yàn)閔ttp2.0是基于https的,天然具有安全特性,通過(guò)http2.0的特性可以避免單純使用https的性能下降
- 二進(jìn)制格式,http1.x的解析是基于文本的,http2.0將所有的信息分割為更小的消息和幀,并對(duì)他們采用二進(jìn)制格式編碼,基于二進(jìn)制可以讓協(xié)議有更多的擴(kuò)展性,比如引入幀來(lái)傳輸數(shù)據(jù)和指令
- 允許多路復(fù)用,多路復(fù)用允許同時(shí)通過(guò)單一的HTTP2連接發(fā)送多重請(qǐng)求-響應(yīng)信息,另外多路復(fù)用中也支持了流的優(yōu)先級(jí),允許客戶端告訴服務(wù)器那些內(nèi)容是更優(yōu)先級(jí)的資源
- 改善了在HTTP1.1中,瀏覽器在同一時(shí)間,針對(duì)同一域名下的請(qǐng)求有一定數(shù)量限制(連接數(shù)量),超過(guò)限制會(huì)被阻塞
- 首部壓縮
- 服務(wù)器推送
11. 400和401、403狀態(tài)碼
- 400狀態(tài)碼:請(qǐng)求無(wú)效
產(chǎn)生原因:
- 401狀態(tài)碼:當(dāng)前請(qǐng)求需要用戶驗(yàn)證
- 403狀態(tài)碼:服務(wù)已經(jīng)得到請(qǐng)求、但是拒絕執(zhí)行
12.HTTP狀態(tài)碼
- 100 Contion 繼續(xù)??蛻舳藨?yīng)該繼續(xù)其請(qǐng)求;
- 101 SwitchingProtocols 切換協(xié)議。服務(wù)器根據(jù)客戶端的請(qǐng)求切換協(xié)議。只能切換到更高級(jí)的協(xié)議,例如,切換到HTTP的新版本協(xié)議;
- 200 OK 請(qǐng)求成功。一般用于GET和POST請(qǐng)求;
- 201 Created 已創(chuàng)建。成功請(qǐng)求并創(chuàng)建了新的資源;
- 202 Accepted 已接受。已接受請(qǐng)求,但未處理完成;
- 203 Non-Authoritative Information 非授權(quán)信息。請(qǐng)求成功但返回的meta信息不在原始服務(wù)器,而是一個(gè)副本
- 204 No Content 無(wú)內(nèi)容。服務(wù)器處理成功,但未能返回內(nèi)容。在未更新網(wǎng)頁(yè)的情況下,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔;
- 205 Reset Content 重置內(nèi)容。服務(wù)器處理成功,用戶終端(瀏覽器)應(yīng)重置文檔視圖。可通過(guò)此返回碼清除瀏覽器的表單域;
- 206 Partial Content 部分內(nèi)容。服務(wù)器成功處理部分GET請(qǐng)求;
- 300 Multiple Choices 多種選擇。請(qǐng)求的資源可包括多個(gè)位置,相應(yīng)可返回一個(gè)資源特征與地址的列表用于用戶終端(瀏覽器)選擇;
- 301 Moved Permanently 永久移動(dòng)。請(qǐng)求的資源已被永久的移動(dòng)到新的URL,返回信息會(huì)包括新的URL,瀏覽器會(huì)自動(dòng)定向到新的URL。今后任何新的請(qǐng)求都應(yīng)使用新的URL代替。
- 302 Found 臨時(shí)移動(dòng)。與301類似。但資源只是臨時(shí)被移動(dòng)??蛻舳藨?yīng)繼續(xù)使用原有的URL;
- 303 See Other 查看其它地址。與301類似。使用GET和POST請(qǐng)求查看;
- 304 Not Modified 未修改。所有請(qǐng)求的資源未修改,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源??蛻舳送ǔ?huì)緩存訪問(wèn)過(guò)的資源,通過(guò)提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源;
- 305 Use Proxy 使用代理。所請(qǐng)求的資源必須經(jīng)過(guò)代理訪問(wèn);
- 306 Unused 已經(jīng)被廢棄的HTTP狀態(tài)碼
- 307 Tenporary Redirect 臨時(shí)重定向。與302類似。使用GET請(qǐng)求重定向;
- 400 Bad Request 客戶端請(qǐng)求的語(yǔ)法錯(cuò)誤,服務(wù)器無(wú)法理解;
- 401 Unauthorized 請(qǐng)求要求用戶的身份認(rèn)證;
- 402 Payment Required 保留,將來(lái)使用;
- 403 Forbidden 服務(wù)器理解請(qǐng)求客戶端的請(qǐng)求,但是拒絕執(zhí)行次請(qǐng)求
- 404 Not Found 服務(wù)器無(wú)法根據(jù)客戶端的請(qǐng)求找到網(wǎng)頁(yè)。通過(guò)此代碼,網(wǎng)站設(shè)計(jì)人員可設(shè)置“您所其你去的資源無(wú)法找到”的個(gè)性頁(yè)面
- 405 Method Not Allowed 客戶端請(qǐng)求中的方法被禁止
- 406 Not Acceptable 服務(wù)器無(wú)法根據(jù)客戶端請(qǐng)求的內(nèi)容特性完成請(qǐng)求;
- 407 Poxy Authentication Required 請(qǐng)求要求代理的身份認(rèn)證,與401類似但請(qǐng)求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán);
- 408 Reuest Time-out 服務(wù)器等待客戶端發(fā)送的請(qǐng)求時(shí)間過(guò)長(zhǎng),超時(shí)
- 409 Conflict 服務(wù)器完成客戶端的PUT請(qǐng)求是可能返回此代碼,服務(wù)器處理請(qǐng)求時(shí)發(fā)生了沖突
- 410 Gone 客戶端請(qǐng)求的資源已經(jīng)不存在。410不同于404,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設(shè)計(jì)人員可通過(guò)301代碼指定資源的新位置;
- 411 Length Required 服務(wù)器無(wú)法處理客戶端發(fā)送的不帶Content-Length的請(qǐng)求信息;
- 412 Precondition Failed 客戶端請(qǐng)求信息的先決條件錯(cuò)誤;
- 413 Request Entity Too Large 由于請(qǐng)求的實(shí)體過(guò)大,服務(wù)器無(wú)法處理,因此拒絕請(qǐng)求,為防止客服端的連續(xù)請(qǐng)求,服務(wù)器可能會(huì)關(guān)閉連接。如果只是服務(wù)器暫時(shí)無(wú)法處理,則會(huì)包含一個(gè)Retry-After的響應(yīng)信息;
- 414 Request-URL Too Large 請(qǐng)求的url過(guò)長(zhǎng),服務(wù)器無(wú)法處理;
- 415 Unsupported Media Type 服務(wù)器無(wú)法處理請(qǐng)求附帶的媒體格式;
- 416 Request range not satisfiable 客戶端請(qǐng)求的范圍無(wú)效;
- 417 Expectation Failed服務(wù)器無(wú)法滿足Expect的請(qǐng)求頭信息;
- 500 Internal Server Error 服務(wù)器內(nèi)部錯(cuò)誤,無(wú)法完成請(qǐng)求
- 501 Not Implemented 服務(wù)齊全不支持請(qǐng)求的功能,無(wú)法完成請(qǐng)求;
- 502 Bad Gateway 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從遠(yuǎn)程服務(wù)器收到了一個(gè)無(wú)效的響應(yīng)
- 503 Service Unavailable 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無(wú)法處理客戶端的請(qǐng)求。延時(shí)的長(zhǎng)度可能包含在服務(wù)器的Retry-After頭信息中;
- 504 Gateway Time-out 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請(qǐng)求
- 505 HTTP Version not supported 服務(wù)器不支持請(qǐng)求的HTTP協(xié)議版本,無(wú)法完成處理
13.http常用請(qǐng)求頭
| Accept | 可接受的響應(yīng)內(nèi)容類型(content-type) |
| Accept-Charset | 可接受的字符集 |
| Accept-Encoding | 可接受的相應(yīng)內(nèi)容的編碼方式 |
| Accept-Language | 可接受的響應(yīng)內(nèi)容語(yǔ)言列表 |
| Accept-Datetime | 可接受的按照時(shí)間來(lái)表示的響應(yīng)內(nèi)容版本 |
| Authorization | 用于表示HTTP協(xié)議中需要認(rèn)證資源的認(rèn)證信息 |
| Cache-Control | 用來(lái)指定當(dāng)前的請(qǐng)求/回復(fù)中的,是否使用緩存機(jī)制 |
| Cennection | 客戶端(瀏覽器)優(yōu)先使用的連接類型 |
| Cookie | 由之前服務(wù)器通過(guò)set-cookie設(shè)置的一個(gè)HTTP協(xié)議cookie |
| Content-Length | 以8進(jìn)制表示的請(qǐng)求體的長(zhǎng)度 |
| Content-MD5 | 請(qǐng)求體的內(nèi)容的二進(jìn)制MD5散列值(數(shù)字簽名),以Base64編碼的結(jié)果 |
| Content-Type | 請(qǐng)求體的MIME類型(用于POST和PUT請(qǐng)求中) |
| Date | 發(fā)送該消息的日期和時(shí)間 |
| Expect | 表示客戶端要求服務(wù)器做出特定的行為 |
| From | 發(fā)起此請(qǐng)求的用戶的郵件地址 |
| Host | 表示 服務(wù)器的域名以及服務(wù)器所監(jiān)聽(tīng)的端口號(hào)。如果所請(qǐng)求的端口是對(duì)應(yīng)的服務(wù)器的標(biāo)準(zhǔn)端口(80),則端口號(hào)可以省略 |
| If-Match | 僅當(dāng)客戶端提供的實(shí)體與服務(wù)器上對(duì)應(yīng)的實(shí)體相匹配時(shí),才進(jìn)行對(duì)應(yīng)的操作。主要用于像PUT這樣的方法中,僅當(dāng)從用戶上次更新某個(gè)資源后,該資源未被修改的情況下,才更新該資源 |
| If-modified-since | 允許在應(yīng)對(duì)的資源未被修改的情況下返回304未修改 |
| If-none-Match | 允許在應(yīng)對(duì)的內(nèi)容未被修改的情況下返回304未修改(304 Not Modified),參考超文本傳輸協(xié)議的實(shí)體標(biāo)記 |
| If-Range | 如果該實(shí)體未被修改過(guò),則返回所缺少的那一個(gè)或多個(gè)部分,否則,返回整個(gè)新的實(shí)體 |
| If-Unmodified-Since | 僅當(dāng)該實(shí)體自某個(gè)特定時(shí)間以來(lái)未被修改的情況下,才發(fā)送回應(yīng) |
| Max-Forwards | 限制該消息可被代理及網(wǎng)關(guān)轉(zhuǎn)發(fā)的次數(shù) |
| Origin | 發(fā)起一個(gè)針對(duì)跨域資源共享的請(qǐng)求(該請(qǐng)求要求服務(wù)器在響應(yīng)中加入一個(gè)Access-Control-Allow-Origin的消息頭,表示訪問(wèn)控制所允許的來(lái)源) |
| Pragma | 與具體的實(shí)現(xiàn)相關(guān)。這些字段可能在請(qǐng)求/回應(yīng)鏈中的任何時(shí)候產(chǎn)生 |
| Porxy-Authorization | 用于向代理進(jìn)行認(rèn)證的認(rèn)證信息 |
| Range | 表示請(qǐng)求某個(gè)實(shí)體的一部分,字節(jié)偏移以0開(kāi)始 |
| Referer | 表示瀏覽器所訪問(wèn)的前一個(gè)頁(yè)面,可以認(rèn)為是之前訪問(wèn)頁(yè)面的鏈接將瀏覽器帶到了當(dāng)前頁(yè)面,Referere其實(shí)是Referrer這個(gè)單詞,但是RFC制作標(biāo)準(zhǔn)時(shí)給拼錯(cuò)了,后來(lái)也就將錯(cuò)就錯(cuò)使用Referer了 |
| TE | 瀏覽器預(yù)期接受的傳輸時(shí)的編碼方式:可使用回應(yīng)協(xié)議頭Transfer-Encoding中的值用來(lái)表示瀏覽器希望在最后一個(gè)大小為0的塊之后還要接收到一些額外的字段 |
| User-Agent | 瀏覽器的身份標(biāo)識(shí)字符串 |
| Upgrade | 要求服務(wù)器升級(jí)到一個(gè)高版本協(xié)議 |
| Via | 告訴服務(wù)器,這個(gè)請(qǐng)求是由哪些代理發(fā)出的 |
| Waming | 一個(gè)一般性的警告,表示在實(shí)體內(nèi)容體中可能存在錯(cuò)誤 |
14.強(qiáng)、協(xié)商緩存
緩存分為兩種:強(qiáng)緩存和協(xié)商緩存,根據(jù)響應(yīng)的header內(nèi)容來(lái)決定。
因?yàn)榉?wù)器上的資源不是一直固定不變的,大多數(shù)情況下它會(huì)更新,這個(gè)時(shí)候如果我們還訪問(wèn)本地緩存,那個(gè)對(duì)用戶來(lái)說(shuō),那就是相當(dāng)于,用戶看到的還是舊的資源;所以我們希望服務(wù)器上的資源更新了,瀏覽器就請(qǐng)求新的資源,沒(méi)有更新就使用本地的緩存,以最大程度的減少因網(wǎng)絡(luò)請(qǐng)求而產(chǎn)生的資源浪費(fèi)。
瀏覽器請(qǐng)求流程:
- 瀏覽器會(huì)獲取該緩存資源的 header 中的信息,根據(jù) response header 中的 expires 和 cache-control 來(lái)判斷是否命中強(qiáng)緩存,如果命中則直接從緩存中獲取資源。
- 如果沒(méi)有命中強(qiáng)緩存,瀏覽器就會(huì)發(fā)送請(qǐng)求到服務(wù),服務(wù)器會(huì)通過(guò) Last-Modified或者 Etag來(lái)判斷是否命中協(xié)商緩存。
- 如果命中,則服務(wù)器返回 304 狀態(tài)碼,并且不會(huì)返回資源內(nèi)容,瀏覽器會(huì)直接從緩存獲取;
- 否則服務(wù)器最終會(huì)返回資源的實(shí)際內(nèi)容,并更新 header 中的相關(guān)緩存字段。
強(qiáng)緩存相關(guān)字段有expires,cache-control后者優(yōu)先級(jí)更高
協(xié)商緩存相關(guān)字段:Last-Modified/If-Modified-Since,Etag/If-none-Match
15.GET和POST的區(qū)別
- get參數(shù)通過(guò)url傳遞,post放在request body中;
- get請(qǐng)求在url中的參數(shù)有長(zhǎng)度限制,post沒(méi)有;
- get比post更不安全,因?yàn)閰?shù)直接暴露在url中,所以不能用來(lái)傳遞敏感信息;
- get請(qǐng)求只能進(jìn)行url編碼,而post支持多種方式編碼;
- get請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器的歷史記錄中,而post中的參數(shù)不會(huì)被保留;
- get和post本質(zhì)上即使tcp鏈接,并無(wú)差別,但是由于HTTP的規(guī)定和 瀏覽器/服務(wù)器的限制,導(dǎo)致他們?cè)趹?yīng)用過(guò)程中體現(xiàn)出一些不同;
- get產(chǎn)生一個(gè)tcp數(shù)據(jù)包,post產(chǎn)生兩個(gè)tcp數(shù)據(jù)包
16.常見(jiàn)的HTTP頭部
可以將http頭部分為:通用首部、請(qǐng)求首部、響應(yīng)首部、實(shí)體首部
- 通用首部:表示一些通用信息,比如date表示報(bào)文創(chuàng)建時(shí)間
- 請(qǐng)求首部:請(qǐng)求報(bào)文中獨(dú)有的,如cookie,和緩存相關(guān)的如if-Modified-Since
- 響應(yīng)首部:響應(yīng)報(bào)文中獨(dú)有的,如set-cookie,和重定向相關(guān)的location
- 實(shí)體首部:用來(lái)描述實(shí)體部分,如allow用來(lái)描述可執(zhí)行的請(qǐng)求方法,caontent-type描述主體類型,content-Encoding描述主體的編碼方式
總結(jié)
以上是生活随笔為你收集整理的前端常见知识点一之HTTP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 南京驾车到甘南藏族自治州米拉日巴佛楼阁怎
- 下一篇: 秦皇岛到黄骅港没有直达车去哪倒车去黄骅港