HTTP2.0之Header 入门版、面试版 一看就懂

news/2025/3/18 16:20:44/文章来源:https://www.cnblogs.com/panjianghao/p/18779179

在 HTTP/1.x 中,每个请求都会携带完整的 Header 字段(如 User-Agent、Cookie 等),即使多个请求的 Header 变化不大,也需要重复发送,导致大量带宽浪费。

HTTP/2 引入了 HPACK 头部压缩算法,通过表格存储和差量更新,减少 Header 体积,提高传输效率。

关键点

通讯双方(客户端 & 服务端)各自维护一张动态表,缓存 Header 信息。

后续请求不再传递完整头部,只传递索引或增量变化。

使用 Huffman 编码压缩 Header 字段值,进一步减少大小。

具体流程

首次请求:完整发送头部字段

客户端 -> 服务端:发送完整的 Header 并存入动态表。

服务器收到后,同样存入动态表。

后续请求:只发送变化部分(索引 + 差量更新)

如果 Header 完全相同,客户端只发送索引(减少重复数据)。

如果 Header 部分字段变化,客户端仅发送新增或修改的部分。

服务器收到后,更新自己的动态表,按需修改 Header。

动态表初始为空:

索引 Header Name Header Value
(空) (空) (空)

说了上面这些,我们有了初步了解,接下来通过例子来加深印象。

第 1 次请求(完整 Header)

请求:

GET /index.html HTTP/2Host: example.comUser-Agent: Chrome/100Accept-Encoding: gzipCookie: session=abc123

由于动态表为空,客户端完整发送 Header。

服务器接收 Header 后,会依次存入动态表(新项在表头)。

动态表(服务器端更新):

索引 Header Name Header Value
1 Cookie session=abc123
2 Accept-Encoding gzip
3 User-Agent Chrome/100
4 Host example.com

第 2 次请求(部分 Header 相同,内容变化)

请求:

GET /about.html HTTP/2Host: example.comUser-Agent: Chrome/100Accept-Encoding: gzipCookie: session=xyz456

变化点:

Host、User-Agent、Accept-Encoding 未变(可以直接用索引)。

Cookie 变了(session=xyz456),需要发送新的值,并更新动态表。

客户端优化发送(使用索引 + 变更值):

索引4  # Host: example.com索引3  # User-Agent: Chrome/100索引2  # Accept-Encoding: gzip(新值) Cookie: session=xyz456

动态表(服务器端更新):

索引 Header Name Header Value
1 Cookie session=xyz456 (替换旧值)
2 Accept-Encoding gzip
3 User-Agent Chrome/100
4 Host example.com

客户端只发送 1 个新字段,其余字段直接用索引代替,减少了数据传输量。

第 3 次请求(部分 Header 继续变化,新增字段)

请求:

GET /profile.html HTTP/2Host: example.comUser-Agent: Chrome/100Accept-Encoding: gzipCookie: session=xyz456Authorization: Bearer 12345  # 新增字段

变化点:

Cookie 未变(使用索引)。

Authorization 是新字段(需要传输并更新动态表)。

客户端优化发送:

索引4  # Host: example.com索引3  # User-Agent: Chrome/100索引2  # Accept-Encoding: gzip索引1  # Cookie: session=xyz456(新值) Authorization: Bearer 12345

动态表(服务器端更新):

索引 Header Name Header Value
1 Authorization Bearer 12345 (新增)
2 Cookie session=xyz456
3 Accept-Encoding gzip
4 User-Agent Chrome/100
5 Host example.com

好了,通过上面的例子,你多多少少应该懂了,接下来总结一下。

总结

HTTP/2 通过 HPACK 机制压缩 Header,缓存已发送字段,并在后续请求中只传递差量数据。

通讯双方(客户端 & 服务端)各自维护一个动态表,避免重复发送相同头部字段,提升传输效率。

头部字段采用 Huffman 编码进一步压缩,减少宽带占用。

最后如果觉得文章对你有帮助,记得给个赞,感谢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900989.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识Open3D

Step01初识Open3d 程序代码: import open3d as o3d #导入Open3d库 def main():#定义主函数box = o3d.geometry.TriangleMesh.create_box(width=3.0, height=2.0, depth=1.0)#创建一个长方体对象box.compute_vertex_normals() #计算法向量vis = o3d.visualization.Visualizer(…

20222223 实验一《Python程序设计》实验报告

20222223 2024-2025-2 《Python程序设计》实验一报告课程:《Python程序设计》 班级: 2222 姓名: 李東霖 学号: 20222223 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

交换节点 - 环

树上交换节点给定一棵树,每个节点有一个权值。现在每次可以交换任意两个节点的权值,请问最少多少次交换可以使得每个节点的权值等于它的编号? 保证给出的权值是一个排列,也就是说保证一定有解。时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M输入描…

Arduino雷达使用Android移动应用程序

该系统可以检测障碍物并收集距离和角度信息,并且可以通过移动应用程序通过蓝牙进行控制。 Arduino雷达使用Android移动应用程序本项目是一个由超声波传感器和伺服电机驱动的雷达系统。该系统可以检测障碍物并收集距离和角度信息,并且可以通过移动应用程序通过蓝牙进行控制。该…

使用cursor打造智能客服demo

cursor AI它真的是非常强大。 今天讲下如何使用它,搭配deepseek api接口,来生成一个智能客服系统。这是最终的效果。首先cursor需要登录后才能使用。登录之后有两周的免费试用期。我们在窗口的右侧填写智能客服的需求。帮我实现一个网页智能客服。详细要求如下: 1.生成一个h…

【蓝牙小程序】小程序使用echart图表报错:setOption of undefined

转载自:https://developers.weixin.qq.com/community/develop/doc/0004ac054ccec0f26df7baa8756800问题:小程序使用echart图表报错 Cannot read property setOption of undefined;at api request success callback function TypeError: Cannot read property setOption of un…

前端中的Javascript

前端中的Javascript javascript定义方式内联JavaScript直接在HTML元素的事件属性中编写JavaScript代码<body><h1>Hello, World!</h1><button onclick="alert(Button clicked!)">Click Me</button> </body>内部JavaScript可以直接…

NVM:安装配置使用

一、简介 在实际的开发和学习中可能会遇到不同项目的 node 版本不同,而出现的兼容性问题。 而 nvm 就可以很好的解决这个问题,它可以在同一台机器上下管理多个 node 版本,使得程序员可以轻松地安装、卸载和切换不同的 node 版本。 在下载和配置 nvm 前,需要在控制面板中先删…

硬盘科普,M.2,PCI-E,NVMe 傻傻分不清

首先从三个层面去理解这个问题:物理接口,通道,协议 1:物理接口(相当于通讯中的电,光口) 大白话- 物理规格,像是 公路,铁路 专门跑PCI-E通道的那个物理接口:扩展性极强,可以插显卡的PCI-E X16的那个物理接口,或者插网卡,声卡的那个PCI-E X1那个物理接口,都是属于一类…

第二届长城杯ciscn半决赛awdp pwn以及应急响应wp

这次半决赛还真是状况频出,先是上午全场靶机断联了2轮,下午的应急又在坐大牢,还好是后面捋顺了逻辑做出来了,下半场干了个赛区第二,总成绩第四,这回是真燃尽了 上半场AWDP typo fix 一开始一直在改这道结果后面才发现那个prompt是真的好改,白浪费了3轮。。。 进入程序是…

LLM Assistance for Memory Safety

LLM Assistance for Memory SafetyMohammed, Nausheen, et al. "LLM Assistance for Memory Safety." 2025 IEEE/ACM 47th International Conference on Software Engineering (ICSE). IEEE Computer Society, 2024.Introduction 在软件安全的漏洞中,内存安全是主要…