您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關HTTP/2協議中二進制楨的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
楨的格式由9個字節的楨頭和楨數據Payload構成;楨頭由3個字節的楨長度、1個字節的楨類型、1個字節的標志位、4個字節的流標識符(含1位R保留位)構成。
楨長度
楨長度由24位3個字節大小表示。取值在2^14(16,384)與2^24-1(16,777,215)之間;可在接收方SETTINGS_MAX_FRAME_SIZE設置。
楨類型
楨類型用8位1個字節表示,說明楨的格式和語義。具體楨的類型詳見下文介紹。
標志位
標志位用8位1個字節表示。例如:END_HEADERS標志表示頭數據傳輸結束;END_STREAM表示單方向數據傳輸結束。
R
R即1位保留字段,未定義,以0x0結尾。
流標識符
流標識符用31位表示,上限為2^31。接收方可以根據流標識ID進行組裝,同一個Stream中內Frame必須是有序的,所以接受方根據流ID可以拼接成有序的流。另外:客戶端發起的流用奇數表識;服務器發起的流用偶數標識。正因為使用了流標識,接收端可以將并發的Stream進行有序拼接,實現多路復用。
楨數據
傳輸的數據內容Payload由楨類型決定。
數據楨主要存儲HTTP/2數據報文,具體格式如下圖:
字段含義
Padding: 8位填充字節,填充字節可以改變DATA楨的大小,可以啟到安全性功能
Pad Length: 填充字節的長度;PADDED標記為true時表明有填充字節
Data: 具體傳輸的數據
Wireshark抓包截圖
Header楨的結構如下圖:
字段含義
Pad Length:填充字節的長度,填充字節含義同上述Data楨
E:表識流是否為獨占的。設置PRIORITY時才有值
Stream Dependency:該流的依賴流。設置PRIORITY時才有值
Weight:流優先級權重。設置PRIORITY時才有值
Header Block Fragment:Header塊片段
Padding:填充的字節長度
Wireshark抓包截圖
發送流的優先級,格式如下,各字段含義與抓包截圖見Header楨。
當發生錯誤或者取消時,用于終止一個流。
字段含義
Error Code: 32位錯誤代碼,指發生錯誤的原因。
Wireshark抓包截圖
用于傳達連接端點之間的配置參數。
SETTINGS幀的標記ACK為0表示被對等的SETTINGS楨使用;ACK不為0時表示FRAME_SIZE_ERROR的連接錯誤。
楨格式
Identifier參數含義
SETTINGS_HEADER_TABLE_SIZE:通知接收方header解碼表(解碼header塊)的最大尺寸
SETTINGS_ENABLE_PUSH:初始值1表示允許服務端推送,0表示不允許服務端推送
SETTINGS_MAX_CONCURRENT_STREAMS:最大的并發流數(發送者)
SETTINGS_INITIAL_WINDOW_SIZE:stream窗口大小,默認為65535
SETTINGS_MAX_FRAME_SIZE:楨負載大小
SETTINGS_MAX_HEADER_LIST_SIZE:Header列表的最大值
Wireshark抓包截圖
服務端向客戶端推送的楨,客戶端可以返回RST_STREAM拒絕。
圖中R為保留位。
心跳檢測,測量發送往還時間,確定連接是否正常。
標記ACK為0即false表示為PING楨的響應(response);1即True表示PING楨。
楨格式
Wireshark抓包截圖
用于關閉連接或者發出錯誤,允許停止接受新的流并完成前面的流處理。
楨格式
Wireshark抓包截圖
用于連接和流的流量控制。
Wireshark抓包截圖
CONTINUATION一種持續楨用于繼續傳輸Header頭塊片段。通常在Header塊比較大,在HEADERS、PUSH_PROMISE、CONTINUATION楨之后繼續傳輸。
關于“HTTP/2協議中二進制楨的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。