是的,HTTP/2 可以直接在明文 HTTP 上运行(称为 h2c
,即 HTTP/2 over TCP),无需 TLS 加密。但需要注意以下关键点:
1. 技术可行性
h2c
协议:HTTP/2 规范(RFC 7540)明确支持通过非加密的 TCP 连接运行(明文传输),无需 HTTPS。- 适用场景:
- 内网服务通信(如微服务间调用)。
- 开发测试环境。
- gRPC 的某些非加密模式。
2. 现实限制
- 浏览器不支持:所有主流浏览器(Chrome、Firefox等)仅允许通过 HTTPS 使用 HTTP/2。若网站为 HTTP,浏览器会降级到 HTTP/1.1。
- 服务器配置:需显式启用
h2c
(默认不开启)。例如:server {
listen 80 http2; # 明文 HTTP/2
# ...
}
- 安全性风险:明文传输易受中间人攻击(如劫持、篡改),生产环境强烈建议使用 HTTPS。
3. 如何测试 h2c
?
- 使用工具:
或通过支持curl --http2-prior-knowledge http://example.com
h2c
的客户端库(如 gRPC、Go/Python 的 HTTP/2 库)。
4. 与 gRPC 的关系
- gRPC over HTTP/2 默认要求 TLS,但可通过
insecure
模式强制使用h2c
:conn, _ := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
总结
- 能用吗?
可以,技术上支持无 TLS 的 HTTP/2(h2c
),但仅限于特定场景(如内网、开发)。 - 该用吗?
生产环境务必使用 HTTPS + HTTP/2(h2
),否则无法兼容浏览器且存在安全风险。
内容由零声教学AI助手提供,问题来源于学员提问