HTTP/2是一种带来性能和效率重大提升的轮连协议,但在一些场景中,从HTTP/1升级到HTTP/2需要保持往处的吞和互操作。h2c是为解决这个问题而设计的无加密HTTP/2协议格式。这里将介绍如何在TCP上通过h2c完成升级。
h2c是什么?
h2c指以无加密方式在强制进行HTTP/2升级,通过属性(HTTP/Upgrade头或内置)推动从HTTP/1升级。
h2c和HTTPS中的h2协议不同,它不需要TLS/TLS/\uSSL加密,通常用于内部网络或信任环境中。
升级流程
在下面计划中,展示如何实现从HTTP/1升级到HTTP/2。
添加Upgrade头:通过HTTP/1.1升级
客户端可以向服务器发送启动HTTP/2升级的请求:
GET / HTTP/1.1
Host: example.com
Upgrade: h2c
HTTP2-Settings: <base64url-encoded-settings>
Connection: Upgrade, HTTP2-Settings
-
Upgrade:指出目标协议为HTTP/2。
-
HTTP2-Settings:使用基于HTTP/2初始化设置的数据。
服务器返回升级响应
如果服务器支持h2c升级,将返回101 Switching Protocols状态以同意升级:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: h2c
随后,通信将重新切换到HTTP/2。
直接使用HTTP/2 Prior Knowledge
在一些场景中,客户端和服务器先前达成协议,直接使用HTTP/2 Prior Knowledge。
在这种模式下,客户端并不使用Upgrade头,而是直接使用HTTP/2通过TCP进行通信。
使用场景
h2c适合于以下场景:
-
内部网络通信:在信任环境中,h2c可以省略TLS加密软件资源和缓慢。
-
复杂完结系统升级:在充分利用HTTP/2的流控和功能时,h2c通过升级保持网络效率。
-
应用试验和调试:对于前端工程师,h2c可以快速使用无加密下的HTTP/2进行测试和调试。
注意事项
-
安全问题: h2c不使用TLS,敏感信息可能尽露。应及时调配增加密选项。
-
协议兼容性: 确保客户端和服务器部署了对h2c的支持。
-
性能采核: 在进行内部流量分析时,h2c需要进一步核实。
结论
h2c是一种快速完成HTTP/1升级到HTTP/2的方法,并为本地网络和调试提供了优化选项。在选择通信协议时,需根据实际需求在安全和效率之间做出抽表。
目录:
一:浏览器发起 HTTP 请求的典型场景_浏览器如何发送用户名密码的请求-CSDN博客
三:网络为什么要分层:OSI模型与TCP/IP模型-CSDN博客
四:HTTP的诞生:它解决了哪些网络通信难题?-CSDN博客
六:从五种架构风格推导出HTTP的REST架构-CSDN博客
七:如何用Chrome的Network面板分析HTTP报文-CSDN博客
十一:HTTP 状态码详解:解读每一个响应背后的意义-CSDN博客
十九:HTTP包体的传输方式(2):不定长包体-CSDN博客
二十三:Session及第三方Cookie的工作原理-CSDN博客
二十九:复杂的Cache-Control头部解析-CSDN博客