写点什么

HTTP2.0 从原理到实践,保证把你治得服服帖帖!

作者:左诗右码
  • 2025-06-06
    上海
  • 本文字数:2260 字

    阅读完需:约 7 分钟

HTTP2.0 从原理到实践,保证把你治得服服帖帖!

HTTP 是 Web 传输的基础协议,随着互联网的发展,它不断演进,从最初的 HTTP/1.0 到 HTTP/1.1,再到如今的 HTTP/2,每个版本都带来了显著的改进。


本篇文章将深入浅出地讲解 HTTP/2,包括它的优点、使用方法以及如何实际操作它。



1. HTTP 是什么?

HTTP(HyperText Transfer Protocol,超文本传输协议) 是一种用于 Web 通信的协议,负责客户端(浏览器等)与服务器之间的请求和响应。它的主要特点是无状态基于文本,常用于:


  • 浏览网页

  • 移动 App 请求数据

  • API 接口调用(如 REST API)

  • 物联网设备的数据通信


HTTP 目前经历了多个版本升级,每次升级都旨在提高性能和安全性。



2. HTTP/1.1 vs HTTP/2

HTTP/2 相比 HTTP/1.1 主要带来了性能优化,以下是两者的核心区别:




3. HTTP/2 解决了什么问题?

HTTP/2 主要解决了 HTTP/1.1 的几个性能瓶颈:


  1. 减少 TCP 连接开销

  2. HTTP/1.1 需要多个 TCP 连接来并行请求,而 HTTP/2 通过多路复用,让多个请求在同一条 TCP 连接上进行,提高了资源利用率。

  3. 减少冗余的 HTTP 头

  4. HTTP/1.1 的头部信息通常包含大量的重复字段,比如 Cookie、User-Agent 等,每次请求都要重复发送这些信息,增加了数据传输量。HTTP/2 引入了 HPACK 压缩算法,可以对头部信息进行高效压缩,减少传输的数据量,提高传输效率。

  5. 避免队头阻塞(Head-of-Line Blocking)


在 HTTP/1.1 中,由于不支持多路复用,当一个请求被阻塞时,后续的请求只能排队等待,导致整体加载速度变慢。而 HTTP/2 的多路复用技术可以有效解决这个问题,允许多个请求同时并行发送,避免了因单个请求阻塞而影响整个通信过程。


  1. 服务器推送(Server Push)

  2. HTTP/2 允许服务器在客户端请求前,主动推送一些资源,减少请求延迟,例如,在请求 HTML 页面时,服务器可以提前推送 CSS 和 JS,避免额外的请求延迟。



4. 如何使用 HTTP/2?

要使用 HTTP/2,通常需要在服务器端和客户端都进行相应的配置。

服务器端配置

不同的服务器软件有不同的配置方式,以下是常见的几种服务器开启 HTTP/2 的方法:


  • Nginx :确保 Nginx 版本支持 HTTP/2,在配置文件中添加 listen 443 ssl http2; ,并配置好 SSL 证书等相关信息,然后重新加载 Nginx 配置即可。

  • Apache :需要启用 mod_http2 模块,在配置文件中添加 Protocols h2 http/1.1 ,同时配置 SSL 证书等,最后重启 Apache 服务。

  • IIS :在 Windows Server 2016 及以上版本的 IIS 中,默认支持 HTTP/2,只需确保服务器配置正确,并启用 HTTPS 协议即可。

客户端支持

大多数现代浏览器都支持 HTTP/2,如 Chrome、Firefox、Safari 等。通常情况下,只要服务器正确配置了 HTTP/2,浏览器会自动使用 HTTP/2 进行通信,无需额外设置。


另外,虽然 HTTP/2 协议本身不要求 HTTPS,但主流浏览器只在 HTTPS 下启用 HTTP/2,因此建议使用 TLS 证书。

Nginx 开启 HTTP/2(示例)

在 Nginx 配置文件(nginx.conf)中,添加 http2 关键字:


server {    listen 443 ssl http2; # 关键!启用 HTTP/2    server_name example.com;
ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem;
location / { root /var/www/html; index index.html; }}
复制代码


重启 Nginx:


sudo systemctl restart nginx
复制代码



5. 实战:使用 curl 发送 HTTP/2 请求

准备工作

确保你的 curl 工具支持 HTTP/2,并且已经安装了必要的证书。可以通过以下命令检查 curl 是否支持 HTTP/2:


curl -V | grep 'http2'# 输出应包含 "http2"
复制代码


如果有相应的输出,那么则说明支持。

发送 HTTP/2 请求:

我们以 https://httpbin.org/get 作为示例 API 进行测试。


#  `--http2` 参数,强制使用 HTTP/2 协议# `-I` 参数,显示响应头curl -I --http2 https://httpbin.org/get
复制代码


结果示例:

HTTP/2 200date: Fri, 14 Mar 2025 15:18:51 GMTcontent-type: application/jsoncontent-length: 254server: gunicorn/19.9.0
复制代码

如何验证 HTTP/2 是否生效?

  • 关键在于 HTTP/2 200 这一行,表明服务器返回了 HTTP/2 响应。

  • 如果返回的是 HTTP/1.1 200,说明服务器不支持 HTTP/2 或者未正确配置

使用 curl 发送 HTTP/2 详细请求:

可以在 curl 命令中添加 -v 参数,查看详细的请求和响应信息,其中会包含协议版本等细节:


curl -v --http2 https://httpbin.org/get
复制代码


参数说明:


  • -v:显示详细调试信息

  • --http2:强制使用 HTTP/2




6. 使用 HTTP/2 时,需要注意

  1. HTTP/2 不是默认启用的

  2. 服务器和客户端必须都支持 HTTP/2,否则仍然会回退到 HTTP/1.1。

  3. 开启 HTTP/2 不等于网站更快

  4. HTTP/2 主要优化的是并发传输效率,但并不意味着所有场景都会有明显的速度提升,比如:

  5. 如果网站本身请求很少,HTTP/2 提升不明显。

  6. 网络条件差,可能仍然会有较大的延迟。

  7. HTTP/2 不能直接替代 WebSocket

  8. HTTP/2 适合短连接和 Web 资源加载。

  9. WebSocket 适合长连接(如实时聊天应用)。

  10. 使用 HTTPS 虽然 HTTP/2 并非强制要求 HTTPS,但在实际应用中,大多数支持 HTTP/2 的服务器都要求使用 HTTPS,因此在发送请求时通常需要使用 https:// 开头的 URL。

  11. 检查 curl 版本旧版本的 curl 可能不支持 HTTP/2,如果遇到问题,先检查并升级 curl 到最新版本。



7. 总结

HTTP/2 作为 HTTP/1.1 的优化版本,主要提升了性能和并发能力,特别是:


  • 多路复用:减少连接数,提升效率

  • 头部压缩:减少重复数据

  • 服务器推送:减少请求延迟

  • 二进制格式:更高效的数据传输


如果你想使用 HTTP/2:


  • 确保服务器支持 HTTP/2,并且客户端请求时,需要指定使用 HTTP/2

  • 尽量使用 HTTPS

  • 可以用 curl 进行测试


希望这篇文章能帮你更好地理解 HTTP/2,欢迎留言交流你的问题或经验!🚀

发布于: 刚刚阅读数: 6
用户头像

左诗右码

关注

全网同名,欢迎关注交流。 2018-11-22 加入

三观比五官更正,思想比套路更深。常用技术栈PHP、Go、Python,享受编程,平时爱好写点文章。V公主号:「左诗右码」,欢迎关注交流。

评论

发布
暂无评论
HTTP2.0 从原理到实践,保证把你治得服服帖帖!_左诗右码_InfoQ写作社区