在上一篇文章《【HTTP 2.0】 簡介(Introduction)》中,咱們簡單介紹了 HTTP 2。html
在本篇文章中,咱們將會了解到 HTTP 2 協議概述部分的內容。git
HTTP 2 優化了 HTTP 傳輸部分的語義。HTTP 2 支持 HTTP 1.1 中全部的特性,它旨在經過多種方法提高 HTTP 的效率。服務器
HTTP 2 協議的基礎單元是幀(Frame)(參考章節 4.1)。每種幀的目的各不相同。好比,HEADERS 幀和 DATA幀組成了 HTTP 的請求和相應(參考章節 8.1)。其餘類型的幀則用於支持 HTTP 2 的其餘特性,好比 SETTINGS、WINDOW_UPDATE 和 PUSH_PROMISE。網絡
每個 HTTP 經過在其流(參考章節 5)中關聯請求與相應,以實現請求的多路複用。流與流之間是相互獨立的,因此,一個掛起的或者慢速的請求或響應,將不會影響其餘流的進度。併發
經過流量控制和優先級來保證流的多路複用效率。流量控制(參考章節 5.2)保證可用數據可以傳達至接收者。優先級(參考章節 5.3)保證有限的資源可以最早被應用在最重要的流中。優化
HTTP 2 新增了互動模式,以實現服務器主動推送響應內容至客戶端(參考章節 8.2)的功能。服務器推送技術容許服務器預測客戶端所需的數據,並推送至客戶端,經過付出一些網絡資源來下降等待延遲。服務器經過發送 PUSH_PROMISE 幀,創建合成請求,以後即可以經過合成請求在單獨的流中發送響應信息。spa
在一個鏈接中包含大量重複的 HTTP 報頭字段,幀中包括了這些字段,並對其進行了壓縮(參考章節 4.3)。在大多數狀況下,這有利於請求大小的優化,容許不少請求被壓縮至一個數據包。翻譯
HTTP 2 規範分爲如下四部分:代理
幀和流的概念有一部分是獨立於 HTTP 的,本規範沒有定義徹底通用的幀層。幀和流是根據 HTTP 協議以及服務器推送而定製的。code
本文檔中的關鍵詞 「MUST」,「MUST NOT」,「REQUIRED」,「SHALL」,「SHALL NOT」,「SHOULD」,「SHOULD NOT」,「RECOMMENDED」,「MAY」,「OPTIONAL」如 RFC 2119 中所描述的進行解讀。
全部數值都是按網絡字節順序。值均爲無符號,除非進行特殊說明。字面量經過十進制或者十六進制表示。十六進制字面量以 0x 做爲前綴,以區別於十進制字面量。
如下術語用於:
客戶端(client):
發起一個 HTTP 2 鏈接的終端。客戶端發送 HTTP 請求,並接收 HTTP 響應。
鏈接(connection):
兩個終端之間的傳輸層鏈接。
鏈接錯誤(connection error):
影響整個 HTTP 2 鏈接的錯誤。
終端(endpoint):
鏈接中的客戶端或者服務器。
幀(frame):
一個 HTTP 2 鏈接內通訊的最小單位。是一個由報頭和幀類型(八種幀類型之一)所組成的可變長度序列。
點(peer):
點是一個終端。當討論一個特定終端時,「點」指代的是討論的主題所對應的遠程終端。
接收者(receiver):
接收幀的終端。
發送者(sender):
發送幀的終端。
服務器(server):
接受 HTTP 2 鏈接的的終端。服務器接收 HTTP 請求,併發送 HTTP 響應。
流(stream):
HTTP 2 鏈接中雙向流動的幀。
流錯誤(stream error):
獨立的 HTTP 2 流中產生的錯誤。
最後,術語「網關」,「中介」,「代理」和「隧道」在 RFC 7230 的 2.3 章節中有所定義。中介在不一樣的時候即充當客戶端又充當服務器。
術語「有效載荷體」在 RFC 7230 的 3.3 章節中有所定義。
本文以 CC BY-NC-SA 3.0 CN 協議共享,轉載、共享及二次創做時請保留原文出處及連接,請勿用於商業用途。
本文連接:http://litecodes.com/dev/http-2-spec-protocol-overview/
本系列文章將會在個人 GitBook:http2-spec-zh 同步更新,
下一篇文章將會翻譯協議的第三部分:Starting HTTP/2(發起 HTTP 2),不要錯過喲~