头条http2 中的首部压缩的实现原理是什么

Posted 全栈成长之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了头条http2 中的首部压缩的实现原理是什么相关的知识,希望对你有一定的参考价值。

冰岛高地
(© Kevin Krautgartner/Offset by Shutterstock)

本题摘自于我 github 上的面试每日一题:https://github.com/shfshanyue/Daily-Question,并有大厂面经及内推信息,可「在左下角打开本题原文链接」

HPACK 协议,其中原理是哈夫曼编码及索引表 (看来常用的数据结构及算法要有所了解),以下内容摘自 谷歌开发者文档:http2[1]

每个 HTTP 传输都承载一组标头,这些标头说明了传输的资源及其属性。在 HTTP/1.x 中,此元数据始终以纯文本形式,通常会给每个传输增加 500–800 字节的开销。如果使用 HTTP Cookie,增加的开销有时会达到上千字节。(请参阅测量和控制协议开销。) 为了减少此开销和提升性能,HTTP/2 使用 HPACK 压缩格式压缩请求和响应标头元数据,这种格式采用两种简单但是强大的技术:

  1. 这种格式支持通过静态霍夫曼代码对传输的标头字段进行编码,从而减小了各个传输的大小。
  2. 这种格式要求客户端和服务器同时维护和更新一个包含之前见过的标头字段的索引列表(换句话说,它可以建立一个共享的压缩上下文),此列表随后会用作参考,对之前传输的值进行有效编码。

实践出真知,通过 wireshark 抓包分析 http2 的报文对理解 http2 收益颇多。

你要有知识,你就得参加变革现实的实践。你要知道梨子的滋味,你就得变革梨子,亲口吃一吃。你要知道原子的组织同性质,你就得实行物理学和化学的实验,变革原子的情况。你要知道革命的理论和方法,你就得参加革命。

以下是关于抓包信息的截图

「http2 通过 Settings 帧设置 header table size,进行首部压缩」

【头条】http2 中的首部压缩的实现原理是什么

「http2 通过首部压缩后,:method 伪标头在索引表中的 Index 为 2」

【头条】http2 中的首部压缩的实现原理是什么

关于常用的标头会存储在静态索引表固定的位置,详见 https://httpwg.org/specs/rfc7541.html#static.table.definition

【头条】http2 中的首部压缩的实现原理是什么

更多面试

【字节-视频架构组-前端】头条架构组招人了内含自测题
【美团】什么是防抖和节流,他们的应用场景有哪些
【美团】如何获取一个进程的内存并监控

关注我

我是山月,正致力于「每天用五分钟能够看完的简短答案回答一个大厂高频面试题」。扫码添加我的微信,备注进群,加入高级前端进阶群.

加我微信拉你进入面试交流群
每天五分钟,半年大厂中

Reference

[1]

谷歌开发者文档:http2: https://developers.google.com/web/fundamentals/performance/http2/


以上是关于头条http2 中的首部压缩的实现原理是什么的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 2.0 原理详细分析

新一代http协议 http2

4月第5题:http2了解么,能简单聊一下么?

IP数据报首部校验和算法

计算机网络运输层习题5-13

TCP的多路复用和分解