四十七: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博客

相关推荐
gongzemin几秒前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox13 分钟前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
树上有只程序猿41 分钟前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼1 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下1 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞2 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行2 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_593758102 小时前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox
掘金一周2 小时前
金石焕新程 >> 瓜分万元现金大奖征文活动即将回归 | 掘金一周 4.3
前端·人工智能·后端