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

HTTP协议-4-浏览器是怎么抉择HTTP版本的?

浏览器或客户端(如服务端的HttpClient)选择HTTP版本的过程是一个协商机制,涉及客户端和服务器的兼容性

1、浏览器如何选择HTTP版本?

1、初始请求的版本选择

  • HTTP/1.1:如果浏览器和服务器没有特殊配置,初始请求默认使用HTTP/1.1
  • HTTP/2:
    • 浏览器在发起HTTPS请求时,会在TLS握手中通过ALPN(Application-Layer Protocol Negotiation)扩展告知服务器支持的协议(如h2和http/1.1)。
    • 服务器如果支持HTTP/2,会在TLS握手中返回h2,后续通信使用HTTP/2。
  • HTTP/3:
    • HTTP/3基于QUIC协议(UDP),无法通过TLS握手协商。
    • 浏览器首次请求仍使用HTTP/1.1或HTTP/2,服务器通过响应头中的Alt-Svc字段告知客户端支持HTTP/3
    • 示例响应头:Alt- Svc: h3=“:443”; ma=86400
    • 客户端收到后,后续请求会尝试使用HTTP/3。

2、浏览器版本与协议支持

  • 浏览器版本决定支持的协议:
    • 旧版本浏览器(如IE11)仅支持HTTP/1.1
    • 现代浏览器(如Chrome、Firefox、Edge)支持HTTP/2和HTTP/3(需依赖操作系统和TLS库的支持)
    • 例如:Chrome 80+支持HTTP/3,但需要操作系统支持QUIC协议

3、如何查看浏览器使用的HTTP版本?

Chrome示例:
(1)、按F12打开开发者工具。
(2)、切换到Network标签。
(3)、右键点击表头,勾选Protocol列。
(4)、请求列表中会显示协议版本(如h2表示HTTP/2,h3表示HTTP/3)。

如图:
在这里插入图片描述

2、服务端如何处理不同版本的HTTP请求?

1、服务端能否支持所有版本?

服务端的处理能力取决于以下因素:

(1)、Web服务器/容器的版本
  • Tomcat:Tomcat 9+支持HTTP/2(需配置SSL和启用协议),但不支持HTTP/3
  • Nginx:Nginx 1.25+支持HTTP/3(需启用QUIC模块)
  • Apache HTTP Server:Apache 2.4.43+支持HTTP/2(需启用mod_http2)。
(2)、SSL/TLS配置
  • HTTP/2和HTTP/3强制要求HTTPS,服务器必须配置有效的TLS证书
(3)、协议兼容性
  • 如果服务器不支持客户端请求的协议版本(如客户端要求HTTP/3,但服务器不支持),服务器会返回505 HTTP Version Not Supported,或自动降级到HTTP/1.1

2、Tomcat是否需要支持特定HTTP版本?

  • Tomcat 9+支持HTTP/2
    • 需要启用SSL并配置protocol="org.apache.coyote.http11.Http11NioProtocol"或protocol=“org.apache.coyote.http2.Http2Protocol”。

示例server.xml配置:

<Connector port="8443" protocol="org.apache.coyote.http2.Http2Protocol"
sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"keystoreFile="path/to/keystore" keystorePass="password"/>
  • Tomcat不支持HTTP/3
    • HTTP/3基于QUIC协议(UDP),而Tomcat仅支持TCP协议,因此无法直接支持HTTP/3。需要使用反向代理(如Nginx)处理HTTP/3请求,再转发到Tomcat。

3、服务端通过HttpClient发起请求时如何选择HTTP版本?

1、HttpClient的版本决定支持的协议

  • Apache HttpClient 4.x
    • 仅支持HTTP/1.1
    • 不支持HTTP/2或HTTP/3。
  • Apache HttpClient 5.x
    • 支持HTTP/2(需Java 8+和依赖库支持)。
    • 不支持HTTP/3。
  • Java 11+内置的HttpClient
    • 支持HTTP/1.1和HTTP/2(默认启用)。
    • 通过HttpClient.Version.HTTP2强制指定版本。
    • 代码示例:
HttpClient client = HttpClient.newBuilder().version(HttpClient.Version.HTTP2).build();

2、如何查看HttpClient使用的协议?

  • Apache HttpClient:

    • 默认使用HTTP/1.1,无法直接查看协议版本。
    • 若使用HttpClient 5.x的HTTP/2支持,需通过日志或调试工具(如Wireshark)观察流量。
  • Java 11+内置HttpClient:

    • 可通过响应对象获取协议版本:
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.version()); // 输出HTTP/1.1或HTTP/2

4、同一个浏览器对不同服务端可能使用不同的HTTP版本吗?

是可以的!而且这是现代浏览器的正常行为
浏览器会根据每个目标服务器的支持能力,动态选择使用哪种HTTP版本。

浏览器的决策过程如下:
在这里插入图片描述

示例:
假设你用Chrome打开三个网站。
在这里插入图片描述
同一个浏览器,对不同服务器可以使用了不同的HTTP版本

5、各HTTP版本对比

在这里插入图片描述
说明:

  • 现代浏览器只在HTTPS上启用HTTP/2和HTTP/3
  • 现代浏览器选择版本顺序:HTTP/3 > HTTP/2 > HTTP/1.1(按服务器支持情况降级)。

6、HTTP/3和QUIC简介

  • HTTP/3使用QUIC协议(基于UDP),不再依赖TCP。
  • 优势:
    • 减少连接建立时间(0-RTT恢复)
    • 避免队头阻塞(TCP的痛点)
    • 更适合移动网络
  • 支持者:Google、Cloudflare、Facebook、部分国内大厂(如腾讯、阿里云逐步支持)

7、总结与建议

在这里插入图片描述
实际应用建议:
(1)、浏览器端

  • 确保服务器启用HTTPS和HTTP/2(如Nginx或Apache配置)。
  • 如果需要支持HTTP/3,需使用支持QUIC的反向代理(如Nginx QUIC模块)。

(2)、服务端开发

  • 使用Java 11+内置的HttpClient或Apache HttpClient 5.x以支持HTTP/2。
  • 对于HTTP/3,需依赖外部库(如OkHttp 4.9+或QUIC客户端库)。

(3)、容器配置

  • Tomcat仅支持HTTP/1.1和HTTP/2,HTTP/3需通过反向代理实现

通过合理配置客户端和服务器,可以充分利用新协议的性能优势(如HTTP/2的多路复用、HTTP/3的低延迟)。

向阳前行,Dare To Be!!!

http://www.xdnf.cn/news/18300.html

相关文章:

  • 【Java基础】反射,注解,异常,Java8新特性,object类-详细介绍
  • 01.Linux小技巧
  • 「Flink」业务搭建方法总结
  • Chromium base 库中的 Observer 模式实现:ObserverList 与 ObserverListThreadSafe 深度解析
  • 《Python学习之第三方库:开启无限可能》
  • 【K8s】harbor安装与推送镜像
  • 104、【OS】【Nuttx】【周边】文档构建渲染:安装 Sphinx 扩展(上)
  • 【笔记】位错的定义和分类
  • K8s的命名空间需要创建吗
  • HAProxy使用方法以及和LVS区别
  • InfluxDB 开发工具链:IDE 插件与调试技巧(二)
  • 【DDIA】第十章:解析Reduce端连接与分组技术
  • 基于C语言实现的HRV分析方法 —— 与Kubios和MATLAB对比
  • Django 请求生命周期
  • 2025北京世界机器人大会 ​要点总结
  • 检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
  • PPT生成视频的AI大模型应用技巧
  • 第4.3节:awk正则表达式详解-特殊字符
  • apisix负载均衡测试
  • Webrtc在项目中承担的角色
  • 决策树-信息增益(第二十三节课内容总结)
  • 第2章:进阶篇——第2节:索引
  • 从决策树基础到熵与信息增益
  • PYTHON让繁琐的工作自动化-函数
  • 【DL学习笔记】交叉熵损失函数详解
  • 人工智能包括哪些方面内容?
  • minio安装和配置
  • 大数据时代时序数据库选型指南:深度解析与 Apache IoTDB 实践
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + DSP、RISC-V核间通信开发案例
  • MiniMax Agent 上线 Market Place ,AI一键复制克隆网站