四十七:h2c:在TCP上从HTTP/1升级到HTTP/2

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适合于以下场景:

  1. 内部网络通信:在信任环境中,h2c可以省略TLS加密软件资源和缓慢。

  2. 复杂完结系统升级:在充分利用HTTP/2的流控和功能时,h2c通过升级保持网络效率。

  3. 应用试验和调试:对于前端工程师,h2c可以快速使用无加密下的HTTP/2进行测试和调试。

注意事项
  1. 安全问题: h2c不使用TLS,敏感信息可能尽露。应及时调配增加密选项。

  2. 协议兼容性: 确保客户端和服务器部署了对h2c的支持。

  3. 性能采核: 在进行内部流量分析时,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博客

相关推荐
福兮说9 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理10 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆66610 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)10 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan11 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_12 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒12 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技12 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu13 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙13 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript