总结:HTTP1与HTTP2

一、介绍

HTTP/2 相对于 HTTP/1,最主要的区别在于其采用了多路复用技术,这使得它具有更高的性能和更低的延迟。下面是一些 HTTP/1 和 HTTP/2 之间的主要区别:

  1. 多路复用:HTTP/2 采用了多路复用技术,通过单一的连接同时传输多个请求和响应,从而避免了 HTTP/1 中的队头阻塞问题。

  2. 二进制分帧:HTTP/2 在传输数据时采用二进制格式进行分帧,而不是像 HTTP/1 那样采用文本格式。这种方式可以减少数据传输的大小,并且可以有效地压缩数据,提高了数据传输的效率。

  3. 头部压缩:HTTP/2 使用了 HPACK 算法进行头部压缩,从而减少了传输的头部大小,并提高了性能。

  4. 服务器推送:HTTP/2 中引入了服务器推送机制,即在客户端请求数据时,服务器可以主动推送相关的数据给客户端,从而提高了性能和速度。

  5. 安全性:HTTP/2 对安全性的要求更高,要求使用 TLS 加密协议进行传输,从而保证了数据传输的安全性。

总之,HTTP/2 采用了多项技术的改进,从而在性能、效率、安全性等方面都比 HTTP/1 更好,是一个更先进的协议。

二、应用场景

HTTP/1 和 HTTP/2 协议都可以应用于浏览器和后端 API,不过 HTTP/2 更适合在现代 Web 应用中使用。

浏览器方面,绝大多数现代浏览器都支持 HTTP/2 协议,比如 Chrome、Firefox、Safari 等。这意味着,如果你在使用这些浏览器浏览网页时,你可能正在使用 HTTP/2 协议。

后端 API 方面,HTTP/2 的使用通常需要对服务器进行相应的配置和支持,因此需要检查服务器的支持情况。很多 Web 服务器都已经支持 HTTP/2,比如 Apache、Nginx 等,但具体的配置方式可能会有所不同。

要判断当前的请求是使用的 HTTP/1 还是 HTTP/2,可以通过浏览器的开发者工具来查看。在浏览器的 Network 面板中,如果请求使用的是 HTTP/2,那么在协议列中应该会显示“HTTP/2”字样。另外,也可以在请求头中查看协议的版本信息,HTTP/1 使用的是“HTTP/1.x”,而 HTTP/2 使用的是“HTTP/2”。

三、Tomcat对HTTP/2 协议的支持

Tomcat 默认是支持 HTTP/1.1 协议的。从 Tomcat 9.0 开始,Tomcat 也支持 HTTP/2 协议,但需要在 Tomcat 的配置文件中进行相应的配置。

如果想要在 Tomcat 中使用 HTTP/2 协议,可以按照以下步骤进行配置:

  1. 确保 Tomcat 版本是 9.0 或以上。

  2. 在 Tomcat 的配置文件 server.xml 中,找到 Connector 配置项,添加如下配置:

    <Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
               port="8443" maxThreads="200"
               scheme="https" secure="true"
               sslProtocol="TLS"
               sslEnabledProtocols="TLSv1.2,TLSv1.3"
               ...
               >
       <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
    </Connector>

    其中,配置项 UpgradeProtocol 的 className 属性设置为 org.apache.coyote.http2.Http2Protocol,表示启用 HTTP/2 协议。

  3. 配置 SSL 证书,因为 HTTP/2 协议必须使用 SSL 加密传输。可以使用 Tomcat 的默认证书或者自己签发证书。

  4. 重启 Tomcat,使配置生效。

这样配置后,Tomcat 就可以同时支持 HTTP/1.1 和 HTTP/2 协议。客户端可以通过设置相应的请求头来选择使用哪种协议。

四、浏览器是如何适配后端服务的协议的?

假设后端服务使用HTTP1,浏览器是HTTP2

当浏览器与后端服务进行通信时,它们需要协商并选择一种协议来使用。一般来说,这个过程是由浏览器发起的。

如果后端服务使用的是 HTTP/1 协议,而浏览器使用的是 HTTP/2 协议,那么通信过程可能会有如下两种情况:

  1. 浏览器向后端服务发送 HTTP/1 协议的请求

    如果浏览器检测到后端服务不支持 HTTP/2 协议,它将会自动切换到使用 HTTP/1 协议。这个切换的过程通常是由浏览器内部的适配层来完成的,这个适配层会根据浏览器的 HTTP/2 实现和后端服务的 HTTP/1 实现,进行一些协议转换和兼容性处理,以保证通信的正常进行。

  2. 浏览器向一个 HTTP/1-to-HTTP/2 的网关发送请求

    如果后端服务不直接支持 HTTP/2 协议,但是提供了 HTTP/1 到 HTTP/2 的网关服务,那么浏览器可以通过这个网关来与后端服务进行通信。这个网关会在收到浏览器的 HTTP/2 请求后,将其转换为 HTTP/1 协议的请求,并将其发送给后端服务。在后端服务处理完请求后,网关将 HTTP/1 的响应结果再转换为 HTTP/2 协议的响应,并将其返回给浏览器。

总之,浏览器和后端服务之间的协议适配通常是由浏览器内部的适配层或者网关来完成的,这些组件会根据双方的协议实现,进行协议转换和兼容性处理,以确保通信的正常进行。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
http://localhost无法访问时,可能有多种原因导致。其中一种可能是由于IPv6下对localhost解析错误。IPv6是一种新的网络协议,它在解析localhost时可能会出现错误。解决这个问题的方法是将localhost解析为IPv4地址。 另外,可能是系统设置的问题导致localhost访问较慢。可以尝试使用PHPCUSTOM功能大全中的localhost优化功能来解决这个问题。这个功能可以修复系统设置问题,使得localhost访问更加快速。 此外,还可以尝试在浏览器中输入http://localhost:8080/来访问特定的服务。这种方法可以绕过一些网络限制,帮助你访问到想要的内容。 总结起来,解决http://localhost无法访问的方法包括修复IPv6解析错误、优化系统设置以加快localhost访问速度,以及尝试在特定端口上访问localhost。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [怎么解决localhost打不开](https://blog.csdn.net/shangguanqh/article/details/106664522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Tomcat 浏览器输入http://localhost:8080/无法访问的一个解决方案](https://blog.csdn.net/zane06/article/details/80519541)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值