Nginx开启HTTP/2后为啥浏览器还是显示HTTP/1.1?

轩辕树源 阅读 6

我按照网上的教程在 Nginx 里加了 http2 参数,配置看起来没问题,但 Chrome 开发者工具里看请求还是 HTTP/1.1,根本没生效。是不是哪里漏了?

我的站点是用 HTTPS 的,证书也正常。配置文件里 listen 那行是这么写的:

listen 443 ssl http2;

而且 Nginx 版本是 1.20.1,应该支持 HTTP/2 啊。难道还要额外装模块或者改别的地方?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
慕容梓晴
这种情况最常见的原因是浏览器缓存了旧的连接。HTTP/2依赖ALPN(应用层协议协商),浏览器和服务器在TLS握手时会协商使用HTTP/2还是HTTP/1.1。如果你之前用HTTP/1.1访问过,浏览器可能还在用旧连接。

先试试这几个方法:

1. 打开Chrome隐私模式再访问,看Network面板里Protocol列显示的是不是h2
2. 清除浏览器缓存和Cookie,或者直接访问 chrome://net-internals/#h2 点击"Close idle connections"
3. 在命令行验证一下:
curl -I --http2 -k https://你的域名/

如果返回的响应头里有 HTTP/2,说明服务器配置是OK的

如果curl显示HTTP/2但浏览器还是HTTP/1.1,基本就是浏览器缓存问题。

另外提醒一点:Chrome的DevTools里默认不显示Protocol列。你需要在Network面板表头右键,勾选"Protocol"才能看到每个请求用的是h2还是http/1.1。

还有一种情况是SSL证书配置问题导致Nginx回退。检查一下ssl_protocols和ssl_ciphers的配置,尽量用现代一点的设置,比如:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;


配置改完记得 nginx -s reload 重载一下。
点赞
2026-03-18 20:22