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博客
二:基于ABNF语义定义的HTTP消息格式-CSDN博客
三:网络为什么要分层:OSI模型与TCP/IP模型-CSDN博客
四:HTTP的诞生:它解决了哪些网络通信难题?-CSDN博客
五:评估Web架构的七大关键属性-CSDN博客
六:从五种架构风格推导出HTTP的REST架构-CSDN博客
七:如何用Chrome的Network面板分析HTTP报文-CSDN博客
八:URI的基本格式及其与URL的区别-CSDN博客
九:为什么要对URI进行编码?-CSDN博客
十:详解HTTP的请求行-CSDN博客
十一:HTTP 状态码详解:解读每一个响应背后的意义-CSDN博客
十二:HTTP错误响应码:理解与应对-CSDN博客
十三:如何管理跨代理服务器的长短连接?-CSDN博客
十四:HTTP消息在服务器端的路由-CSDN博客
十五:代理服务器转发消息时的相关头部-CSDN博客
十六:请求与响应的上下文-CSDN博客
十七:Web内容协商与资源表述-CSDN博客
十八:HTTP包体的传输方式(1):定长包体-CSDN博客
十九:HTTP包体的传输方式(2):不定长包体-CSDN博客
二十:HTML Form表单提交时的协议格式-CSDN博客
二十一:断点续传与多线程下载是如何做到的?-CSDN博客
二十二:Cookie的格式与约束-CSDN博客
二十三:Session及第三方Cookie的工作原理-CSDN博客
二十四:浏览器为什么要有同源策略?-CSDN博客
二十五:如何“合法”地跨域访问?-CSDN博客
二十六:Web条件请求的作用-CSDN博客
二十七:Web缓存的工作原理-CSDN博客
二十八:Web缓存新鲜度的四种计算方式-CSDN博客
二十九:复杂的Cache-Control头部解析-CSDN博客
三十:在 Web 中什么样的响应才会被缓存?-CSDN博客
三十一:HTTP多种重定向跳转方式的差异-CSDN博客
三十二:HTTP 协议的基本认证-CSDN博客
三十三:Wireshark的基本用法-CSDN博客
三十四:如何通过DNS协议解析域名?-CSDN博客
三十五:Wireshark的捕获过滤器-CSDN博客
三十六:Wireshark的显示过滤器-CSDN博客
三十七:WebSocket解决什么问题?-CSDN博客
三十八:WebSocket的约束-CSDN博客
三十九:WebSocket协议:实时通信的未来-CSDN博客
四十:如何从HTTP升级到WebSocket-CSDN博客
四十一:Web传递消息时的编码格式-CSDN博客
四十一:掩码及其所针对的代理污染攻击-CSDN博客
四十三:Web如何保持会话心跳-CSDN博客
四十四:HTTP/1.1发展中遇到的问题-CSDN博客
四十五:HTTP/2特性概述-CSDN博客
四十六:如何使用Wireshark解密TLS/SSL报文?-CSDN博客