HTTP 概述
超文本傳輸協議(HTTP)全稱Hyper Text Transfer Protocol,用于使用超文本鏈接加載網頁。HTTP 是一種應用層協議,主要涉及客戶端向服務器發出請求,然后服務器發送響應消息。
HTTP 是一種無狀態協議,目前主要與 TLS(傳輸層安全)協議一起使用,TLS為 HTTP 提供機密性、完整性和身份驗證機制——通常稱為 HTTPS。
HTTP 由各種不同的組件組成,用于交換實際數據和元數據:
- HTTP 請求方法(即 GET、POST、PUT、PATCH、DELETE)
- HTTP 標頭(即 Cookie、XFF、主機、內容類型、連接)
- HTTP 響應碼 - 表示請求狀態的數值(例如:404 Not Found,表示在服務器上找不到請求的資源)
HTTP的歷史
歷史上最早的HTTP協議是1989年CERN(譯注:即“歐洲核子研究組織”的原稱 - Conseil Européen pour la Recherche Nucléaire)的 Tim Berners-Lee 發明的,目前命名為HTTP/0.9。然而,由于缺乏現代的傳輸機制、頭文件、方法等,它從未獲得官方的RFC,實際上也不再被使用。下面列出了官方 HTTP 初始規范 RFC,重點介紹了它們引入時最重要的新功能:
HTTP/1.0 - 1996 年 5 月 - RFC 1945
- 支持 HTTP 報頭
- 支持 HTTP 狀態碼
- 支持 Content-Type 報頭
- 增加了新的POST 和 HEAD 方法
HTTP/1.1 - 1997 年 1 月 - RFC 2068
- 引入持久連接 - 可以通過單個連接發送多個請求
- 強制主機頭 - 對web代理路由很重要
- 新的 HTTP 狀態碼 100
- 新的 HTTP 方法 - PUT、PATCH、DELETE、CONNECT、TRACE 和 OPTIONS
- 支持各種壓縮和解壓縮方法 - Gzip 最常用
HTTP/2.0 - 2015 年 5 月 - RFC 7540
- 支持請求多路復用,引入 HTTP 流,現在請求/響應可以多路復用并且不是連續的
- 支持請求優先級,例如,CSS 文件應該在 JS 文件之前發送
- 自動 Gzip 壓縮
- HTTP 連接重置支持,如果在 HTTP 級別發生錯誤,可以立即重置連接
- 支持服務器推送,服務器可以在沒有明確請求的情況下主動將內容推送回客戶端。
- 支持報頭壓縮 (HPAK)
HTTP/3.0 - 2022 年 6 月 - RFC 9114
- 使用 QUIC 協議代替TCP/TLS 棧 - RFC 9000
2022 年 6 月,IETF(互聯網工程任務組)HTTP 組不僅發布了 HTTP/3 RFC 9114,還決定對 HTTP RFC 結構進行細化、清理和重建。此外,有些東西已經從 HTTP 標準中分離出來,并移至它們自己的 RFC 中。
- HTTP 語義- RFC 9110:HTTP 的總體架構、常用術語和共享協議方面,例如請求和響應消息/doc/rfc9111s、方法、狀態碼、頭和尾字段、消息內容、表示數據、內容編碼等等。
- HTTP 緩存- RFC 9111:HTTP 緩存和相關的報頭字段來控制響應緩存的行為。
- HTTP/1.1 - RFC 9112
- HTTP/2.0 - RFC 9113
- QPAC - RFC 9204
在最初的HTTP/1.0發布之后,用戶很快發現它缺少很多潛在的特性,需要進行一些優化。僅半年之后就發布了HTTP/1.1來解決這些問題。而新的官方HTTP/2標準花了整整18年的時間來開發,主要是為了解決性能方面的問題。7年后的2022年6月,HTTP/3協議被引入。
HTTP/3協議最大的變化是放棄了對 TCP/TLS 堆棧的支持,并用新的互聯網協議——QUIC傳輸協議取而代之。
HTTP3
HTTP3是在保持QUIC穩定性的同時使用UDP來實現高速度(選擇QUIC就是選擇UDP), 同時又不會犧牲TLS的安全性。
HTTP2協議雖然大幅提升了HTTP/1.1的性能,然而,基于TCP實現的HTTP2遺留下3個問題:
有序字節流引出的隊頭阻塞(Head-of-line blocking),使得HTTP2的多路復用能力大打折扣;
TCP與TLS疊加了握手時延,建鏈時長還有1倍的下降空間;
基于TCP四元組確定一個連接,這種誕生于有線網絡的設計,并不適合移動狀態下的無線網絡,這意味著IP地址的頻繁變動會導致TCP連接、TLS會話反復握手,成本高昂。
HTTP3協議解決了這些問題:
HTTP3基于UDP協議重新定義了連接,在QUIC層實現了無序、并發字節流的傳輸,解決了隊頭阻塞問題(包括基于QPACK解決了動態表的隊頭阻塞);
HTTP3重新定義了TLS協議加密QUIC頭部的方式,既提高了網絡攻擊成本,又降低了建立連接的速度(僅需1個RTT就可以同時完成建鏈與密鑰協商);
HTTP3 將Packet、QUIC Frame、HTTP3 Frame分離,實現了連接遷移功能,降低了5G環境下高速移動設備的連接維護成本。