HTTP 的演化史:
HTTP/1 -> HTTP/1.1 -> HTTP/2 -> HTTP/3
HTTP/1 v.s. HTTP/1.1
HTTP/1 在每一次的請求都必須重新建立 TCP 連線,既費時且耗頻寬,HTTP/1.1 則默認使用 Keep-alive 持久連線,可重複使用同一個 TCP 連線發送 HTTP 請求
HTTP/1 主要使用標頭中的 If-Modified-Since、Expires 來做為緩存的判斷標準,HTTP/1.1 則引入更多緩存控制機制,例如:Etag、If-Unmodified-Since、If-Match、If-None-Match,透過這些可以更優化緩存的實現
HTTP/1 客戶端發送一個請求給伺服器端,需等待伺服器回應後,才可發送第二筆請求,HTTP/1.1 新增 HTTP pipeline 機制,允許讓客戶端傳送多個 HTTP 請求,不用等待之前的請求回覆,如此能讓網頁載入速度變快,但伺服器端必須按照客戶端傳送的請求順序來回覆請求,要維持先進先出的規則,所以有可能發生隊頭阻塞(HOL blocking)的狀況,即因前一筆請求回應耗時,後面的請求都必須延遲回應,另外因為先進先出的規則嚴格難實作,許多瀏覽器都是預設關閉此功能的 (瀏覽器實踐上,為了維持一定的載入速度,會創建多個 TCP 連線來達到平行載入,瀏覽器通常會限制對一個域名同時只能有一定數量的 TCP 連線)
[閱讀全文]