HTTP/2.0 不强制要求 必须使用 HTTPS(即基于 TLS 加密),但实际应用中几乎所有主流浏览器和服务器实现都默认仅在 HTTPS 下支持 HTTP/2。以下是关键点解析:
1. 协议标准规定
- RFC 7540(HTTP/2 规范)并未强制要求必须使用 TLS(HTTPS)。理论上,HTTP/2 可以通过明文 HTTP(
h2c
)或加密 HTTPS(h2
)运行。 h2c
(HTTP/2 over TCP):明文传输,通常用于开发环境或内部网络。
h2
(HTTP/2 over TLS):加密传输,是生产环境的通用标准。
2. 现实中的限制
- 浏览器要求:所有主流浏览器(Chrome、Firefox、Safari等)仅支持通过 HTTPS 的 HTTP/2。如果网站使用 HTTP,浏览器会降级到 HTTP/1.1。
- 服务器配置:Nginx、Apache 等服务器默认在 TLS 下启用 HTTP/2,需显式配置才能支持
h2c
。 - 安全与性能:HTTP/2 的多路复用等特性与 TLS 结合能更好地防御中间人攻击,同时受益于 TLS 的优化(如 False Start、Session Resumption)。
3. 如何选择?
- 生产环境:必须使用 HTTPS + HTTP/2(
h2
),否则用户无法从现代浏览器访问。 - 测试环境:可通过
h2c
(如 curl、gRPC 内网通信),但需客户端和服务端明确支持。
4. 配置示例(Nginx)
server {
listen 443 ssl http2; # 启用 HTTPS + HTTP/2
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# ...
}
总结:虽然技术上可以不用 HTTPS,但实际场景中 HTTP/2 几乎总是与 HTTPS 绑定。这是出于安全性和兼容性的行业共识。
内容由零声教学AI助手提供,问题来源于学员提问