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




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速盾:海外网站cdn加速免费

随着互联网的快速发展和全球化的趋势,海外网站的重要性也日益增加。然而,由于地理位置等各种因素的限制,海外访问海外网站的速度往往较慢,给用户的体验带来了不便。为了解决这个问题,许多网站开始采用CDN加速技术。 C…

HTML 实体字符简介

在网页设计与开发中,HTML 实体字符扮演着重要的角色,它们帮助我们在HTML文档中安全地插入特殊字符,避免浏览器解析时产生错误或意外的布局效果。实体字符通过特定的编码方式来表示,使得浏览器能够正确识别并展示这些特殊字符。下面…

在云服务器上安装配置和调优Zerotier服务器的详细教程

Hey,朋友们!今天我要在服务器上部署和调优Zerotier服务器。使用三丰云提供的免费服务器,配置为1核CPU、1G内存、10G硬盘和5M带宽。虽然配置不高,但三丰云的免费云服务器已经足够应付我们今天的项目。👍 Zerotier服务器…

阻塞锁和自旋锁的理解

阻塞锁和自旋锁的理解 文章目录 阻塞锁和自旋锁的理解阻塞锁自旋锁阻塞锁自旋锁各自的优缺点自旋锁阻塞锁 选择自旋锁还是阻塞锁 想象你和你的朋友们一起玩一个游戏,但是每次只能一个人玩。为了决定谁先玩,你们可以用两种方法来排队: 阻塞锁…

小程序-生命周期(2) 应用周期/页面周期

一.应用周期 应用周期指的是小程序:启动->运行->销毁的整个过程。 应用周期伴随一些函数来进行控制,这些函数卸载app.js里面的App方法里。 分别由onLaunch, onShow,onHide依次进行。 onLaunch:初始化的时候运行…

第3讲:关于Pixi的Text、Container、Sprite、Graphics组件功能作用

首先这里提供一个公用代码: 下部分各种组件基于这个公用代码直接往下添加代码即可。 import {Application, Text, Container, Sprite, BaseTexture, Texture, Graphics} from pixi.js import ./style.css import testImageUrl from ./images/test.jpg // 指明Appli…

3.1、前端异步编程(超详细手写实现Promise;实现all、race、allSettled、any;async/await的使用)

前端异步编程规范 Promise介绍手写Promise(resolve,reject)手写Promise(then)Promise相关 API实现allraceallSettledany async/await和Promise的关系async/await的使用 Promise介绍 Promise是一个类,可以翻…

HTML静态网页成品作业(HTML+CSS)—— 家乡成都介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

【玩转google云】实战:如何在GKE上使用Helm安装和配置3节点的RabbitMQ集群

需求 因项目需要需要在Google Kubernetes Engine (GKE) 中使用Helm安装一个3节点的RabbitMQ集群,配置用户名和密码,开通公网访问的Web管理界面,指定namespace为mq,并使用5G的硬盘存储MQ的数据。 前提条件 GKE集群:确保你有一个运行中的GKE集群。Helm工具:确保已安装Hel…

Qt 插件框架

在Qt框架中实现插件系统主要涉及到使用Qt的插件机制来动态加载和卸载插件模块。 1、定义插件接口 首先,你需要定义一个或多个接口类,这些类将作为插件和主程序之间的契约。这些接口类通常包含纯虚函数,插件需要实现这些函数。 // MyPlug…

C语言 | Leetcode C语言题解之第164题最大间距

题目&#xff1a; 题解&#xff1a; int maximumGap(int* nums, int numsSize) {if (numsSize < 2) {return 0;}int maxVal INT_MIN, minVal INT_MAX;for (int i 0; i < numsSize; i) {maxVal fmax(maxVal, nums[i]);minVal fmin(minVal, nums[i]);}int d fmax(1,…

计算机网络:3数据链路层

数据链路层 概述封装成帧和透明传输帧透明传输&#xff08;填充字节或比特&#xff09;差错检测奇偶校验循环冗余校验CRC Cyclic Redundancy Check 可靠传输停止-等待协议回退n帧协议&#xff08;滑动窗口协议&#xff09;选择重传协议 点对点协议PPP共享式以太网网络适配器&am…

ubuntu版本升级命令记录

小版本升级(如22.04.3到22.04.4) 具体的版本控制并不常用于小版本升级&#xff0c;因为这些版本升级通常涵盖了安全补丁和错误修复。确保 /etc/apt/sources.list 中的软件源是正确的&#xff0c;并定期运行升级命令&#xff0c;系统将自动升级到最新的小版本。 # 检查当前版本…

java本地缓存(map,Guava,echcache,caffeine)优缺点,以及适用场景

前言 在高并发系统环境下&#xff0c;jvm本地缓存扮演着至关重要的角色&#xff0c;合理的应用能够使系统响应迅速&#xff0c;提高用户体验感&#xff0c;而分布式缓存redis则存在着网络io&#xff0c;以及流量消耗问题&#xff0c;需要和本地缓存搭配使用&#xff0c;才能使…

机器学习算法 —— K近邻(KNN分类)

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 KNN的介绍和应用KNN的介绍1) KNN建立过程2) 类别的判定KNN的优点KNN的缺点KNN的应用实战KNN分类数据集 —— KNN分类库函数导入数据导入模型训练&可视化原理简析莺尾花数据集 —— KNN分…

微信小程序-API 本地存储

一.本地存储-同步API 存储 &#xff1a; wx.setStorageSync 获取&#xff1a;wx.getStorageSync 删除&#xff1a;wx.removeStorageSync 清空&#xff1a;wx.clearStorageSync 代码&#xff1a; save(){//存储wx.setStorageSync(id, 1) wx.setStorageSync(obj, {name:"te…

React+TS前台项目实战(十一)-- 全局常用组件提示语可复制Link组件封装

文章目录 前言HighLightLink组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇讲的这个组件&#xff0c;是一个用于高亮显示文本并添加可选的跳转链接&#xff0c;提示文本&#xff0c;复制文本的 React 组件 HighLightLink组件 1. 功能分析 &#x…

【交易策略】#22-24 残差资金流强度因子

【交易策略】#22-24 残差资金流强度因子

路由控制和策略路由

文章目录 一、路由控制&#xff08;1&#xff09;、前言1.1.1-路由策略 &#xff08;2&#xff09;、正反掩码和通配符1.2.1-通配符 &#xff08;3&#xff09;、ACL1.3.1-ACL步长1.3.2-步长的作用1.3.3-TCP/UDP端口号 实验1:实验2: 二、前缀列表实验1:2.1.1-前缀列表的表达式2…

【图像分割】DSNet: A Novel Way to Use Atrous Convolutions in Semantic Segmentation

DSNet: A Novel Way to Use Atrous Convolutions in Semantic Segmentation 论文链接&#xff1a;http://arxiv.org/abs/2406.03702 代码链接&#xff1a;https://github.com/takaniwa/DSNet 一、摘要 重新审视了现代卷积神经网络&#xff08;CNNs&#xff09;中的atrous卷积…