http頭部 HTTP 2協議之頭部壓縮

2021-10-11 10:25:17 字數 1077 閱讀 2373

為了報文傳輸更小、更快,在http/2中header頭是經過壓縮的,使用的壓縮演算法為hpack。本文先通過wireshark抓包截圖直觀感受下頭部壓縮效果,進而分析下這種壓縮演算法是如何工作的。

以header中的user-agent為例,在壓縮前的大小為63個位元組。

header中的user-agent在壓縮後,大小為1個位元組。

小結:header中user-agent從壓縮前的63個位元組到壓縮後的1個位元組,http/2是如何做到的呢?

http/2頭部通過hpack演算法進行壓縮,這種演算法通過服務端和客戶端個字維護索引表來實現。索引表又分為靜態表和動態表。

header傳輸以二進位制楨的方式進行,為了與http1中header區分,這些以冒號開頭的字段被稱為「偽頭字段」。

2、靜態表

靜態表中定義了61個header欄位與index,可以通過傳輸index進而獲取header的字段與值,極大減少了報文大小。靜態表中的字段和值固定,而且是唯讀的。

3、動態表

動態表接在靜態表之後,結構與靜態表相同,可隨時更新。下圖中索引號62、63即為動態表字段。

回到本文前的壓縮效果對比,客戶端通過傳輸索引號,服務端根據索引號在動態表中獲取header的key與value。user-agent索引號佔1個位元組。另外,索引表中不存在的使用huffman編碼,再更新到動態表中。

HTTP2偽頭部字段

偽頭部欄位是http2內建的幾個特殊的以 開始的key,用於替代http 1.x中請求行 響應行中的資訊,比如請求方法,響應狀態碼等,內建的偽頭部字段列表如下 method method scheme scheme authority authority path path status statu...

公升級HTTP 2協議

首先只有使用https協議的站點可以公升級http 2協議 nginx如果想要公升級http 2需要滿足以下要求 nginx版本要高於1.9.5 with http ssl module 跟 with http v2 module 必帶 因為http2.0協議需要使用https協議。yum inst...

Nginx 支援Http2協議

要開啟http 2協議支援,需要在nginx 1.10以上版本並且需要openssl庫的版本在1.0.2以上編譯。http 2.0只支援開啟了https的 檢視當前openssl版本 需要openssl庫的版本在1.0.2以上 openssl version可以看到我這裡的版本正好是1.0.2 滿足...