nginx默认将gzip_http_version设为1.1,是因为http/1.0不支持chunked编码且难以正确设置content-length,易导致压缩响应乱码;而http/1.1及以上(含http/2)可安全流式压缩并兼容现代客户端。

在 Nginx 中,gzip_http_version 指令用于指定启用 Gzip 压缩所需的最低 HTTP 协议版本。设置 gzip_http_version 1.1 表示:只有当客户端使用 HTTP/1.1 或更高版本(如 HTTP/2)发起请求时,Nginx 才会对响应内容启用 Gzip 压缩。
为什么设为 1.1?
HTTP/1.0 默认不支持 chunked transfer encoding 和明确的 Content-Length 管理,早期浏览器(如 IE6 及更旧版本)在处理 Gzip 压缩的 HTTP/1.0 响应时容易出错或无法解压。将该值设为 1.1 是一种兼容性保护措施,避免给老旧客户端返回压缩内容导致页面乱码或加载失败。
如何配置 gzip_http_version 1.1
在 Nginx 配置文件(如 /etc/nginx/nginx.conf 或站点 server 块中)添加或修改以下指令:
gzip_http_version 1.1;
通常它与其它 Gzip 相关配置一起使用,例如:
- gzip on; — 启用 Gzip 压缩
- gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; — 指定压缩的 MIME 类型
-
gzip_vary on; — 添加
Vary: Accept-Encoding响应头,帮助缓存代理正确区分压缩/未压缩版本
注意 HTTP/2 下的行为
HTTP/2 协议本身不使用 Gzip 压缩响应体(它用 HPACK 压缩头部,并通过二进制帧传输),但 Nginx 在 HTTP/2 连接中仍会执行 Gzip 压缩响应体(前提是满足 gzip_http_version 条件且其他配置允许)。由于 HTTP/2 的协议版本号在 Nginx 内部被识别为 ≥1.1,所以 gzip_http_version 1.1 对 HTTP/2 请求同样生效。
验证是否生效
可通过 curl 检查响应头和压缩效果:
- 模拟 HTTP/1.1 请求:
curl -H "Accept-Encoding: gzip" -I http://your-site.com/style.css→ 应看到Content-Encoding: gzip - 模拟 HTTP/1.0 请求(禁用版本协商):
curl --http1.0 -H "Accept-Encoding: gzip" -I http://your-site.com/style.css→ 不应返回Content-Encoding: gzip











