HTTP2的頭部壓縮是HPACK算法。在客戶端和服務(wù)器兩端建立“字典”,用索引號表示重復(fù)的字符串,采用哈夫曼編碼來壓縮整數(shù)和字符串,可以達(dá)到50%~90%的高壓縮率。具體來說:在客戶端和服務(wù)器端使用“首部表”來跟蹤和存儲之前發(fā)送的鍵值對,對于相同的數(shù)據(jù),不再通過每次請求和響應(yīng)發(fā)送;
首部表在HTTP/2的連接存續(xù)期內(nèi)始終存在,由客戶端和服務(wù)器共同漸進(jìn)地更新;
每個(gè)新的首部鍵值對要么被追加到當(dāng)前表的末尾,要么替換表中之前的值。例如下圖中的兩個(gè)請求, 請求一發(fā)送了所有的頭部字段,第二個(gè)請求則只需要發(fā)送差異數(shù)據(jù),這樣可以減少冗余數(shù)據(jù),降低開銷。