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

相关推荐
m0_748235958 分钟前
前端性能优化面试题汇总
前端·性能优化
Williamoses13 分钟前
挺详细的记录electron【V 33.2.0】打包vue3项目为可执行程序
前端·vue.js·electron
草明14 分钟前
轻量级的 HTML 模板引擎
开发语言·前端·javascript·cloudflare
幽兰的天空43 分钟前
介绍一下CSS中伪类和伪元素的概念
前端·css·html·html5
问道飞鱼1 小时前
【云原生知识】Kubernets实践-前端服务如何访问后端服务
前端·nginx·云原生
张姐学编程2 小时前
【C++】vector
前端·c++·学习·html
liuweni2 小时前
Next.js 自动化测试教程:Jest实战与优化
开发语言·前端·javascript·经验分享·前端框架·node.js
m0_748241702 小时前
BUUCTF之web篇
前端
工控匠2 小时前
ASP.net mvc--ECharts图表框架
前端·javascript·echarts
m0_748254662 小时前
SpringMVC 请求参数接收
前端·javascript·算法