如果你的站点已启用 HTTPS 且承载多个静态资源,开启 HTTP/2 多路复用是降低延迟的标准配置,但需确保服务端软件版本支持且 TLS 配置正确。
先说结论:在 HTTPS 环境下开启 HTTP/2 能有效减少连接开销,但并非所有场景都能感知明显提速,需结合资源数量判断。
- 适合:HTTPS 站点、静态资源较多、移动端网络环境复杂场景
- 先准备:确保证书有效、服务端软件支持 HTTP/2 模块、备份配置文件
- 验收:通过浏览器开发者工具或 curl 命令确认协议版本为 h2
命令速用版
以下是常见 Web 服务软件的配置片段,修改后需重载服务。
# Nginx 配置示例
server {
listen 443 ssl http2;
server_name example.com;
# ... 其他 SSL 配置
}# Apache 配置示例 (httpd.conf 或 ssl.conf)
<IfModule mod_ssl.c>
Protocols h2 http/1.1
</IfModule>为什么会这样
HTTP/1.1 中,浏览器对同一域名的并发连接数有限制,且存在队头阻塞问题,即一个请求阻塞会影响后续请求。HTTP/2 通过多路复用技术,允许在单个 TCP 连接上并行发送多个请求和响应,减少了握手次数和慢启动影响。但要注意,HTTP/2 并未解决 TCP 层面的队头阻塞,这是 HTTP/3 关注的范畴。
分步处理
1. 检查环境:确认服务端已安装支持 HTTP/2 的版本(如 Nginx 1.9.5+ 开启编译选项,或较新版本默认支持)。
2. 配置 TLS:主流浏览器仅支持通过 TLS 加密连接使用 HTTP/2,明文 HTTP/2 (h2c) 兼容性较差,建议强制 HTTPS。
3. 修改配置:参考上方命令速用版,在监听端口处添加 http2 参数或协议声明。
4. 重载服务:执行重载命令使配置生效,注意先测试配置语法是否正确。
怎么验证是否生效
1. 浏览器检查:打开 Chrome 开发者工具 -> Network 面板,查看 Protocol 列,显示 h2 即为生效。
2. 命令行检查:使用 curl 命令测试,例如 curl -I `--http2` -v https://yourdomain.com,观察输出中是否包含 HTTP/2 标识。
3. 在线工具:使用 KeyCDN HTTP/2 Test 等公开工具检测服务端支持情况。
常见坑
1. TLS 版本过低:部分旧版 TLS 配置可能导致握手失败,建议使用 TLS 1.2 或 1.3。
2. 代理层干扰:如果服务端前有负载均衡或 CDN,需确保链路全程支持 HTTP/2,否则可能降级为 HTTP/1.1。
3. 性能误区:对于单一大文件下载,HTTP/2 提升有限;主要优势在于多小资源并发加载。
4. 服务器压力:多路复用可能增加单连接的生命周期和内存占用,需关注服务器并发连接数限制。
参考来源
- MDN Web Docs: HTTP/2
- Nginx Official Documentation: ngx_http_v2_module
- RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2)