前端須要瞭解的http知識

1、五層協議
1. OSI(Open System Interconnection 開放式系統互聯)七層協議
1)應用層 2)表示層 3)會話層 4)傳輸層 5)網絡層 6)數據連接層 7)物理層
2. TCP/IP四層網絡協議 (Transmission Control Protocol 傳輸控制協議)
1)應用層 2)運輸層 3)網絡層 4)網絡接口層
3. 折中後的五層協議
1)應用層(dns,http) DNS解析成IP併發送http請求
2)傳輸層(tcp,udp) 創建tcp鏈接(三次握手)
3)網絡層(IP,ARP) IP尋址
4)數據鏈路層(PPP) 封裝成幀
5)物理層(利用物理介質傳輸比特流) 物理傳輸(而後傳輸的時候經過雙絞線,電磁波等各類介質)
簡括:
從應用層的發送http請求,到傳輸層經過三次握手創建tcp/ip鏈接,再到網絡層的ip尋址,再到數據鏈路層的封裝成幀,最後到物理層的利用物理介質傳輸。
segmentfault

2、HTTP狀態碼
1XX 用於指定客戶端相應的某些動做
2XX 用於表示成功
3XX 用於已經移動的文件而且被包含在定位頭信息中指定心的地址信息(重定向,爲了完成請求,必須進一步執行的動做)
4XX 用於指出客戶端錯誤
5XX 用於支持服務器錯誤瀏覽器

100 繼續;101 分組交換協議
200 ok;201 被建立;202 被採納;203 非受權信息;204 無內容;205 重置內容;206 部份內容;
300 多選項;301 永久地傳遞;302 找到;303 參見其餘;304 未改動;305 使用代理;307 暫時重定向;
400 錯誤請求(多是get請求寫成post請求);401 未受權;402 要求付費;403 禁止;405 不容許的方法;406 不被採納;407 要求代碼受權;
408 請求超時;409 衝突;410 過時的;411 要求的長度;412 前提不成立;413 請求實例太大;
414 請求url太大;415 不支持的媒體類型;416 沒法知足的請求範圍;417 失敗的預期;
500 內部服務器錯誤;501 未被使用;502 網關錯誤;503 不可用的服務;504 網關超時;505 HTTP版本未被支持;緩存

3、http 1.1 與 http 1.0 的區別
1. http 1.0 對於每一個鏈接都得創建一次鏈接, 一次只能傳送一個請求和響應, 請求就會關閉, http1.0 沒有 Host 字段,而 http1.1 在同一個鏈接中能夠傳送多個請求和響應, 多個請求能夠重疊和同時進行, http1.1 必須有 host 字段
2. http1.1 中引入了 ETag 頭, 它的值 entity tag 能夠用來惟一的描述一個資源. 請求消息中可使用 If-None-Match 頭域來匹配資源的 entitytag 是否有變化
3. http1.1 新增了 Cache-Control 頭域(消息請求和響應請求均可以使用), 它支持一個可擴展的指令子集
4.http1.0 中只定義了 16 個狀態響應碼, 對錯誤或警告的提示不夠具體. http1.1 引入了一個 Warning 頭域, 增長對錯誤或警告信息的描述. 且新增了 24 個狀態響應碼安全

4、TCP三次握手和四次揮手
1. 三次握手:
首先 Client 端發送鏈接請求報文,Server 段接受鏈接後回覆 ACK 報文,併爲此次鏈接分配資源。Client 端接收到 ACK 報文後也向 Server 段發生 ACK 報文,並分配資源,這樣 TCP 鏈接就創建了。
2. 四次揮手:
因爲TCP鏈接是全雙工的,所以每一個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的鏈接。收到一個 FIN只意味着這一方向上沒有數據流動,一個TCP鏈接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另外一方執行被動關閉。服務器

5、HTTP與HTTPS的區別
1. Http 協議運行在 TCP 之上,明文傳輸,客戶端與服務器端都沒法驗證對方的身份;Https 是身披 SSL(Secure Socket Layer)外殼的 Http,運行於 SSL 上,SSL 運行於 TCP 之上,是添加了加密和認證機制的 HTTP。兩者之間存在以下不一樣:
2. 端口不一樣:Http 與 Http 使用不一樣的鏈接方式,用的端口也不同,前者是 80,後者是 443;
3. 資源消耗:和 HTTP 通訊相比,Https 通訊會因爲加減密處理消耗更多的 CPU 和內存資源;
4. 開銷:Https 通訊須要證書,而證書通常須要向認證機構購買;
6. Https 的加密機制是一種共享密鑰加密和公開密鑰加密並用的混合加密機制。cookie

6、HTTP的幾種請求方法的用途
1. GET 方法:發送一個請求來取得服務器上的某一資源
2. POST 方法:向 URL 指定的資源提交數據或附加新的數據
3. PUT 方法:跟 POST 方法很像,也是想服務器提交數據。可是,它們之間有不一樣。PUT 指定了資源在服務器上的位置,而 POST 沒有
4. HEAD 方法:只請求頁面的首部
5. DELETE 方法:刪除服務器上的某資源
6. OPTIONS 方法:它用於獲取當前 URL 所支持的方法。若是請求成功,會有一個 Allow 的頭包含相似「GET,POST」這樣的信息
7. TRACE 方法:TRACE 方法被用於激發一個遠程的,應用層的請求消息迴路
8.CONNECT 方法:把請求鏈接轉換到透明的 TCP/IP 通道網絡

7、Socket 鏈接與 HTTP 鏈接的聯繫與區別
1. 因爲一般狀況下 Socket 鏈接就是 TCP 鏈接,所以 Socket 鏈接一旦創建,通訊雙方便可開始相互發送數據內容,直到雙方鏈接斷開。但在實際網絡應用中,客戶端到服務器之間的通訊每每須要穿越多箇中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的鏈接而致使 Socket 鏈接斷連,所以須要經過輪詢告訴網絡,該鏈接處於活躍狀態。
2. 而 HTTP 鏈接使用的是「請求—響應」的方式,不只在請求時須要先創建鏈接,並且須要客戶端向服務器發出請求後,服務器端才能回覆數據。
3. 不少狀況下,須要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步。此時若雙方創建的是 Socket 鏈接,服務器就能夠直接將數據傳送給客戶端;若雙方創建的是 HTTP 鏈接,則服務器須要等到客戶端發送一次請求後才能將數據傳回給客戶端,所以,客戶端定時向服務器端發送鏈接請求,不只能夠保持在線,同時也是在「詢問」服務器是否有新的數據,若是有就將數據傳給客戶端。併發

8、http(tcp) 報文結構
例如一個 100kb 的 HTML 文檔須要傳送到另一臺計算機,並不會整個文檔直接傳送過去,可能會切割成幾個部分,好比四個分別爲 25kb 的數據段。而每一個數據段再加上一個 TCP 首部,就組成了 TCP 報文。 TCP 報文 (Segment),包括首部和數據部分。dom

9、http 報文大小限制
如前所述,一個 HTTP 報文包含起始行,頭域和消息體,HTTP 協議自己並無對報文中任一部分的長度作限制,也就是說,理論上一個請求 URI 能夠無限長,頭域能夠無限多,請求體能夠無限大。但在實際場景下,請求 URI 的長度會受到瀏覽器的限制,若是在瀏覽器中輸入過長的 URL,那麼瀏覽器會自動進行截斷。而服務器出於安全性和效率的考慮,也會對頭域和消息體的大小做出必定的限制。tcp

10、HTTP 的緩存機制
Http 的緩存主要利用 header 裏的兩個字段來控制,經過 Cache-control 和 Etag 的配合來實現 Http 的緩存機制。
1. Cache-control主要包含以及幾個字段:
private:則只有客戶端能夠緩存
public:客戶端和代理服務器均可以緩存
max-age:緩存的過時時間
no-cache:須要使用對比緩存來驗證緩存數據
no-store:全部內存都不會進行緩存
2. ETag:即用來進行對比緩存,Etag 是服務端資源的一個標識碼
當客戶端發送第一次請求時服務端會下發當前請求資源的標識碼 Etag,下次再請求時,客戶端則會經過 header 裏的 If-None-Match 將這個標識碼 Etag 帶上,服務端將客戶端傳來的 Etag 與最新的資源 Etag 作對比,若是同樣,則表示資源沒有更新,返回 304。

11、如何理解 HTTP 協議是無狀態的
HTTP 協議是無狀態的,指的是協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態。也就是說,打開一個服務器上的網頁和上一次打開這個服務器上的網頁之間沒有任何聯繫。HTTP 是一個無狀態的面向鏈接的協議,無狀態不表明 HTTP 不能保持 TCP 鏈接,更不能表明 HTTP 使用的是 UDP 協議(無鏈接)。

12、HTTP 長鏈接、短鏈接
在 HTTP/1.0 中默認使用短鏈接。也就是說,客戶端和服務器每進行一次 HTTP 操做,就創建一次鏈接,任務結束就中斷鏈接。當客戶端瀏覽器訪問的某個 HTML 或其餘類型的 Web 頁中包含有其餘的 Web 資源(如 JavaScript 文件、圖像文件、CSS 文件等),每遇到這樣一個 Web 資源,瀏覽器就會從新創建一個 HTTP 會話。
而從 HTTP/1.1 起,默認使用長鏈接,用以保持鏈接特性。使用長鏈接的 HTTP 協議,會在響應頭加入這行代碼:
Connection:keep-alive
在使用長鏈接的狀況下,當一個網頁打開完成後,客戶端和服務器之間用於傳輸 HTTP 數據的 TCP 鏈接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經創建的鏈接。Keep-Alive 不會永久保持鏈接,它有一個保持時間,能夠在不一樣的服務器軟件(如 Apache)中設定這個時間。實現長鏈接須要客戶端和服務端都支持長鏈接。
HTTP 協議的長鏈接和短鏈接,實質上是 TCP 協議的長鏈接和短鏈接。

十3、cookie
Cookie 就是用來在本地緩存記住一些狀態的,一個 Cookie 通常都包含 domin(所屬域)、path、Expires(過時時間)等幾個屬性。服務端能夠經過在響應頭裏的 set-cookies 來將狀態寫入客戶端的 Cookie 裏。下次客戶端發起請求時能夠帶上cookie。

參考: 1. https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651555258&idx=1&sn=7db72c92735bb4cbe7a769eb1f10cee7 2. https://segmentfault.com/a/1190000013662126#articleHeader13

相關文章
相關標籤/搜索