深入HTTP2 (幀格式)

h2 的幀

h2 的傳輸過程中最重要的角色就是幀了。

h2 的其他相關(guān)文章
深入 HTTP2(幀,消息,流)
H2 升級前的調(diào)研

標準幀頭部
  • Length : 代表整個 frame 的長度,用一個 24 位無符號整數(shù)表示

但是這不意味著就能處理 2^24 16M大小的幀,一般是默認只支持2^16 16k以下的幀,而2^16 - 2^24 16M 的幀 需要接收端公布自己可以處理這么大的幀,需要在 SETTINGS_MAX_FRAME_SIZE 幀中告知。

  • Type : 定義 frame 的類型。幀類型決定了幀主體的格式和語義,如果 type 為 unknown 應該忽略或拋棄。
幀類型 編碼類型 用途
DATA 0x0 傳遞HTTP包體
HEADERS 0x1 傳遞HTTP包頭
PRIORITY 0x2 指定Stream 流的優(yōu)先級
RST_STREAM 0x3 終止Stream流
SETTINGS 0x4 修改連接或者Stream流的配置
PUSH_PROMISE 0x5 服務端推送資源時描述請求的幀
PING 0x6 心跳監(jiān)測兼具測量RTT的功能
GOAWAY 0x7 優(yōu)雅的終止錯誤或通知錯誤
WINDOW_UPDATE 0x8 實現(xiàn)流量控制
CONTINUATION 0x9 傳遞較大HTTP頭部時的持續(xù)幀
  • Flags :是為幀類型相關(guān)而預留的布爾標識。標識對于不同的幀類型賦予了不同的語義。
    在HEADER幀中。(注意不同的幀中,F(xiàn)lags不一樣)

    HEADER 中的 Flags

  • R: 是一個保留的比特位。這個比特的語義沒有定義,發(fā)送時它必須被設置為 (0x0), 接收時需要忽略。

  • Frame Payload : 是主體內(nèi)容,由幀類型決定

SETTING 幀

SETTING幀只運行在 0 號流上。SETTING幀不是協(xié)商,而是通知。


SETTING

幀類型

  • SETTINGS_HEADER_TABLE_SIZE (0x1): 通知對端索引表的最大尺寸(單位字節(jié),初始 4096 字節(jié))用于解碼header塊的header壓縮表的最大尺寸。
  • SETTINGS_ENABLE_PUSH (0x2): Value設置為 0 時可禁用服務器推送功能,1 表示啟用推送功能。如果禁用對端就不能發(fā)送PUSH_PROMISE 幀,如果客戶端收到PUSH_PROMISE 就視為PROTOCOL_ERROR 的連接錯誤。
  • SETTINGS_MAX_CONCURRENT_STREAMS (0x3): 告訴接收端允許的最大并發(fā)流數(shù)量。
  • SETTINGS_INITIAL_WINDOW_SIZE (0x4): 聲明發(fā)送端的窗口大小,用于Stream級別流控,初始值2^16-1 (65,535)
    字節(jié)
  • SETTINGS_MAX_FRAME_SIZE (0x5):設置幀的最大大小,初始值 2^14 (16,384)字節(jié)
  • SETTINGS_MAX_HEADER_LIST_SIZE (0x6): 知會對端頭部索引表的最大尺寸,單位字節(jié),基于未壓縮前的頭部
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容