欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > HTTP/2 协议学习

HTTP/2 协议学习

2024/11/30 8:56:47 来源:https://blog.csdn.net/wochunyang/article/details/139746032  浏览:    关键词:HTTP/2 协议学习

HTTP/2 协议介绍


HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。HTTP 2.0在2013年8月进行首次合作共事性测试。在开放互联网上HTTP 2.0将只用于https://网址,而 http://网址将继续使用HTTP/1,目的是在开放互联网上增加使用加密技术,以提供强有力的保护去遏制主动攻击。DANE RFC6698允许域名管理员不通过第三方CA自行发行证书。【文字来源百度百科】

​HTTP的现状


当前,几乎所有互联网上的内容都采用HTTP 1.1作为通信协议。人们在该协议上投入了大量精力,因此基于该协议的基础架构得以日臻完善。得益于此,在现有的HTTP协议之上构建新的方案会比从底层建立新的协议要容易得多。

HTTP刚诞生的时候被看作一个相对简单直观的协议,但时间证明了早期的设计并不尽人意。于1996年发布的、描述HTTP 1.0规范的RFC 1945只有60页,但仅仅3年之后,描述HTTP 1.1规范的RFC 2616就骤增至176页。当我们在IETF小组对该规范进行更新时,更是被拆分成了总页数更多的六个文档(这就是RFC 7230及其文件族的由来与诞生)。总而言之,HTTP 1.1包含了太多细节和可选内容,这让它变得过于庞大。

HTTP发展里程碑

HTTP/0.9 (1991年)
  • 特点:最初版本的HTTP,只支持GET方法,没有请求头和响应头,仅用于获取HTML文档。

HTTP/1.0 (1996年)
  • 特点:引入了请求头和响应头,支持多种数据类型,如图片、视频等。增加了POST和HEAD方法,以及状态码。

HTTP/1.1 (1999年)
  • 特点:引入了持久连接(keep-alive),减少了重复建立TCP连接的开销。增加了管道化技术(pipelining),允许在一个连接上发送多个请求,但响应仍需按顺序返回。增加了更多的请求方法和缓存控制机制。

SPDY协议 (2009年)
  • 特点:由Google开发,旨在减少网页加载延迟,增加安全性,优化HTTP/1.x的性能问题。SPDY的多路复用、头部压缩等特性后来被HTTP/2采纳。

HTTP/2 (2015年)
  • 特点:基于SPDY协议,由IETF标准化。引入了二进制分帧层、多路复用、头部压缩、服务器推送等特性,显著提高了性能。

HTTP/3 (2020年)
  • 特点:基于QUIC协议,由IETF标准化。使用UDP代替TCP作为传输层协议,进一步减少延迟,提高连接的可靠性和安全性。

HTTP/2 协议关键特性和改进点

  • 多路复用:HTTP/2 允许在单个TCP连接上并行传输多个请求和响应,这减少了页面加载时间,提高了网络吞吐量2。

  • 二进制传输:与HTTP/1.1使用的文本协议不同,HTTP/2使用二进制协议,这使得数据更快地被解析和传输,减少了传输过程中的开销和延迟2。

  • 头部压缩:HTTP/2使用HPACK算法对HTTP头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟2。

  • 服务器推送:HTTP/2支持服务器推送,允许服务器在客户端请求之前推送资源,这有助于提高页面加载速度2。

  • 改进的安全性:HTTP/2默认使用TLS加密传输数据,提高了数据传输的安全性2。

  • 兼容HTTP/1.1:HTTP/2可以与HTTP/1.1共存,服务器可以同时支持两种协议。如果客户端不支持HTTP/2,服务器可以回退到HTTP/1.12。

  • 流控制和优先级:HTTP/2引入了流控制和优先级机制,确保重要的资源被优先传输,同时避免一个慢速的响应阻塞其他响应的处理4。

  • 帧结构:HTTP/2的数据交换被拆分为更小的消息和帧,每个帧至少包含一个标识符,指明该帧所属的流4。

  • 连接建立:HTTP/2可以通过TLS/1.2或更高版本的加密连接(h2)或非加密连接(h2c)进行数据传输。客户端和服务器可以通过TLS的ALPN扩展进行协议协商4。

  • 流量控制:HTTP/2使用WINDOW_UPDATE帧来实现流量控制,确保在同一连接上的流不会相互干扰4。

支持HTTP/2的Java容器主

  • Jetty

    • Jetty是一个开源的servlet容器,它支持HTTP/2协议。Jetty 9.4版本及以上提供了对HTTP/2的完整支持,包括服务器端和客户端。

  • Undertow

    • Undertow是JBoss开发的一个灵活的高性能Web服务器,它也支持HTTP/2。作为WildFly应用服务器的一部分,Undertow提供了对HTTP/2的集成支持。

  • Tomcat

    • Apache Tomcat是一个流行的开源servlet容器,它从Tomcat 9版本开始支持HTTP/2。Tomcat的HTTP/2支持是通过APR/native connector实现的,这意味着需要安装APR库。需要Java 9或更高版本的JDK来支持。

  • Netty

    • Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。Netty支持HTTP/2,并且可以用于构建自定义的HTTP/2服务器或客户端。

  • GlassFish

    • GlassFish是一个开源的应用服务器,它支持Java EE标准。GlassFish 5版本及以上支持HTTP/2。

  • WildFly

    • WildFly(前身为JBoss Application Server)是一个开源的Java EE应用服务器。WildFly 10版本及以上通过其默认的Undertow Web服务器支持HTTP/2。

Undertow学习-CSDN博客

springboot的WebFlux 和Servlet-CSDN博客

【spring 】支持spring WebFlux 的容器-CSDN博客




版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com