当前位置: 首页 > 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博客




http://www.lryc.cn/news/375368.html

相关文章:

  • “先票后款”条款的效力认定
  • CSDN 自动上传图片并优化Markdown的图片显示
  • 常见日志库NLog、log4net、Serilog和Microsoft.Extensions.Logging介绍和区别
  • 【PX4-AutoPilot教程-TIPS】离线安装Flight Review PX4日志分析工具
  • 探究Spring Boot自动配置的底层原理
  • Fedora40的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash
  • 重生之 SpringBoot3 入门保姆级学习(19、场景整合 CentOS7 Docker 的安装)
  • cve_2014_3120-Elasticsearch-rce-vulfocus靶场
  • 吴恩达2022机器学习专项课程C2W3:2.26 机器学习发展历程
  • 当OpenHarmony遇上OpenEuler
  • Apple - Framework Programming Guide
  • R可视化:ggpubr包学习
  • 优化Spring Boot项目启动时间:详解与实践
  • Android如何简单快速实现RecycleView的拖动重排序功能
  • LabVIEW利用旋转编码器脉冲触发数据采集
  • Dubbo3 服务原生支持 http 访问,兼具高性能与易用性
  • 我在高职教STM32——GPIO入门之蜂鸣器
  • STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
  • 如果搜索一定超时,如何用dp来以空间换时间
  • MySQL常见的命令
  • 11 类型泛化
  • UE4_后期_ben_模糊和锐化滤镜
  • Spring Boot中Excel的导入导出的实现之Apache POI框架使用教程
  • CentOS搭建kubernetes集群详细过程(yum安装方式)
  • Java 面试题:Java 的 Exception 和 Error 有什么区别?
  • 在Vue 3中,el-select循环el-option的常见踩坑点,value值绑定对象类型?选中效果不准确?
  • Qt实现单例模式:Q_GLOBAL_STATIC和Q_GLOBAL_STATIC_WITH_ARGS
  • 通过nginx转发后应用偶发502bad gateway
  • linux中如何进行yum源的挂载
  • ffmpeg的部署踩坑及简单使用方式