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.rhkb.cn/news/358049.html

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

相关文章

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法…

数据清洗!即插即用!异常值、缺失值、离群值处理、残差分析和孤立森林异常检测,确保数据清洗的全面性和准确性,MATLAB程序!

适用平台:Matlab2021版及以上 数据清洗是数据处理和分析中的一个关键步骤,特别是对于像风电场这样的大型、复杂数据集。清洗数据的目的是为了确保数据的准确性、一致性和完整性,从而提高数据分析的质量和可信度,是深度学习训练和…

BUCK电路布线规则、EMI分析

电源系列文章目录 本系列文章为博主在学习工作过程中的心得记录,欢迎评论区交流讨论。 BUCK电路工作原理、参数计算及工作模式分析BUCK电路布线规则、EMI分析电源电路中肖特基、续流二极管要求 目录 电源系列文章目录一、PCB布线规则1、输入电感与肖特基摆放2、输…

云原生容器技术入门:Docker、K8s技术的基本原理和用途

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、容器技术概述 1、什么是容器技术 2、容器技术的历史与发展 3…

QT事件处理系统之二:窗口部件的事件拦截,以及事件的传递顺序

1、案例说明 在父窗口中为selfLineEdit窗口安装事件过滤器,这样我们可以在父窗口中首先拦截来自于selfLineEdit本身产生的事件,并且决定该事件最终是否继续传递到selfLineEdit窗口本身。 2、关键代码 selfLineEdit.cpp #include "selfLineEdit.h" #include &l…

【树形dp 换根法 BFS】2581. 统计可能的树根数目

本文涉及知识点 CBFS算法 动态规划汇总 图论知识汇总 树形dp 换根法 BFS LeetCode 2581. 统计可能的树根数目 Alice 有一棵 n 个节点的树,节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges 表示,其中 edges[i] [ai, bi] &#xf…

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地,利用代码为GitHub:https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2 5. 算法设计 5.1 正确性 5.2 可读性(高内聚、低耦合) 5.3 健壮性 5.4 高效率(时间复杂度&am…

Visual Studio开发环境搭建

原文:https://blog.c12th.cn/archives/25.html Visual Studio开发环境搭建 测试:笔记本原装操作系统:Windows 10 家庭中文版 资源分享链接:提取码:qbt2 注意事项:注意查看本地硬盘是否够用,建议…

2. 数据结构分析即索引库的crud

1. 数据库脚本 DROP TABLE IF EXISTS tb_hotel; CREATE TABLE tb_hotel (id bigint(0) NOT NULL,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT COMMENT 酒店名称,address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_090…

运营管理和服务支撑阶段

我前面的所有设备都部署好了,现在就需要运营管理和服务支撑 遇到问题了迅速解决,避免风险扩大 我们也可以给客户提供上面的服务,提高客户的预警能力,安全风险处理能力 我们不仅提供设备,还提供服务 我们公司成立了安…

【算法专题--链表】两两交换链表中的节点 -- 高频面试题(图文详解,小白一看就懂!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 采用哨兵位头节点 🥝 什么是哨兵位头节点? 🍍 解题思路 🍍 案例图解 四、总结与提炼 五、共勉 一、前言 两两交换链表中的节点 这道题,可以说…

K8S - 在集群内反向代理外部资源 - headless service 的使用

在上一篇文章中 K8S - 理解ClusterIP - 集群内部service之间的反向代理和loadbalancer 介绍了 ClusterIP 的主要作用 : 在k8s 集群内部 代理 内部的多实例 service 但是ClusterIP 还有1个变种 -> 无头服务 (headless service) 它用于代理集群外部的 ip资源 当然代理外部资…

AI应用带你玩系列之SadTalker

前段时间我刷微信视频,我无意间点开了一个,画面缓缓展开,是一幅精致的水墨画,画中人物皆是古代装束,衣袂飘飘,仿佛能闻到墨香。然而,这宁静的画面突然被打破了,画中的人物开始动了起…

初识 SpringMVC,运行配置第一个Spring MVC 程序

1. 初识 SpringMVC,运行配置第一个Spring MVC 程序 文章目录 1. 初识 SpringMVC,运行配置第一个Spring MVC 程序1.1 什么是 MVC 2. Spring MVC 概述2.1 Spring MVC 的作用: 3. 运行配置第一个 Spring MVC 程序3.1 第一步:创建Mave…

鸿蒙开发系统基础能力:【@ohos.faultLogger (故障日志获取)】

故障日志获取 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import faultLogger from ohos.faultLoggerFaultType 故障类型枚举。 系统能力: 以下各项对应的系统能力…

利用MSSQL模拟提权

点击星标,即时接收最新推文 本文选自《内网安全攻防:红队之路》 扫描二维码五折购书 利用MSSQL模拟提权 在MS SQL数据库,可以使用EXECUTE AS语句,以其他用户的上下文执行SQL查询。需要注意的是只有明确授予模拟(Impers…

vuex的深入学习[基于vuex3]----篇(二)

store对象的创建 store的传递图 创建语句索引 创建vuex的语句为new Vuex.Store({…})Vuex的入口文件是index.js,store是index.js导出的store类store类是store.js文件中定义的。 Store的构造函数constructor 判断vuex是否被注入,就是将vue挂载在window对象上&am…

Java | Leetcode Java题解之第169题多数元素

题目: 题解: class Solution {public int majorityElement(int[] nums) {int count 0;Integer candidate null;for (int num : nums) {if (count 0) {candidate num;}count (num candidate) ? 1 : -1;}return candidate;} }

TLS握手中的RTT

文章目录 TLS 1.2 握手过程中的 RTT 次数TLS 1.3 1-RTT 初次TLS1.3 0-RTT 握手过程总结 TLS 1.2 握手过程中的 RTT 次数 TLS 1.2 握手通常需要2 RTT 才能完成。具体步骤如下: 第一次 RTT: 客户端发送 ClientHello:客户端生成一个随机数&…