当前位置: 首页 > news >正文

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博客




相关文章:

  • VMware ESXi 8.0U2c macOS Unlocker OEM BIOS ConnectX-3 网卡定制版 (集成驱动版)
  • 流程图工具评测:十大热门软件对比
  • Spring Boot 中如何解决跨域问题、Spring Cloud 5大组件、微服务的优缺点是什么?
  • 模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类
  • 【软件测试】软件测试入门
  • AOSP开发环境搭建
  • 志愿服务管理系统的设计
  • 【全网最全最详细】RabbitMQ面试题
  • 【Go】用 DBeaver、db browser 和 SqlCipher 读取 SqlCipher 数据库
  • Java基础16(集合框架 List ArrayList容器类 ArrayList底层源码解析及扩容机制)
  • C++ unique_ptr
  • ESP8266发送WOL幻数据包实现电脑远程唤醒
  • <router-view />标签的理解
  • mysql预置的数据库
  • 微服务迁移、重构最佳经验
  • centos安装java运行环境jdk+tomcat
  • E-HPC支持多队列管理和自动伸缩
  • gops —— Go 程序诊断分析工具
  • Java 网络编程(2):UDP 的使用
  • Java-详解HashMap
  • Magento 1.x 中文订单打印乱码
  • maya建模与骨骼动画快速实现人工鱼
  • October CMS - 快速入门 9 Images And Galleries
  • SQL 难点解决:记录的引用
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 线上 python http server profile 实践
  • 学习笔记TF060:图像语音结合,看图说话
  • 最近的计划
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • scrapy中间件源码分析及常用中间件大全
  • 数据库巡检项
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​数据链路层——流量控制可靠传输机制 ​
  • #{} 和 ${}区别
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #include
  • (4)STL算法之比较
  • (Ruby)Ubuntu12.04安装Rails环境
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (九)c52学习之旅-定时器
  • (蓝桥杯每日一题)love
  • (区间dp) (经典例题) 石子合并
  • (算法)大数的进制转换
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (自用)网络编程
  • **PHP分步表单提交思路(分页表单提交)
  • *1 计算机基础和操作系统基础及几大协议
  • .cn根服务器被攻击之后
  • .Net 6.0 Windows平台如何判断当前电脑是否联网
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 流——流的类型体系简单介绍