http1.0 http1.1 http2.0
http1.0協議
無狀態:藉助COOKIE/SESSION 傳遞身份,狀態等資訊
無連線:每次客戶端和服務端傳送請求都要建立新的連線
隊頭阻塞:下一個請求必須在上一個請求的響應到達之後才能傳送
http1.1
長連線 keep-alive:客戶端和伺服器端的連線保持不斷開
管道化:FIFO 解決了隊頭阻塞,一個請求的傳送不用等到上一個請求的響應返回之後才傳送,客戶端可以同時傳送多個request,但是服務端必須一個一個的響應
快取處理 cache-control:服務端為了遵守fifo的原理(按照資源的重要程度進行排列HTML>CSS,JS,CSS>圖片),如果先後收到requestA和B,A的資源優先順序比B高。requesrA處理10m,requestB處理1m先處理好,就將響應B存放在緩衝區
增加host欄位:可以實現在一臺伺服器的IP和埠建立多個虛擬web站點,訪問的域名server
支援斷點續傳:range(客戶端請求傳位元組的位置)、 content-range(伺服器端傳輸位元組的範圍)、Accept-range:bytes(服務端支援斷點續傳)
http2.0
二進位制協議
http2 客戶端與伺服器端值建立了一個tcp連線,該連線在互動期間一直處於開啟狀態
客戶端與伺服器端的連線是通過流來進行傳遞的 一條訊息包含一個完整的幀序列
報頭壓縮,標頭資訊相同的不會重新發
流優化 ,每個流都有一個優先順序,確定該流的處理順序,
伺服器推送,如果伺服器預測客戶端的資源需求,會在請求處理前,將這些資源傳送到客戶端
伺服器會發送一個PUSH_PROMISE幀,但是客戶端可以通過RST_STREAM幀為響應拒絕推送
流控制 ,開啟連線後,客戶端會和服務端互相交換SETTINGS幀來確定流控制視窗的大小,預設值為65kb,可以通過WINDOW_UPDATE幀為流控制設定不同的大小