Kong在8000端口开启HTTP2后HTTP访问报错,是否需分端口部署HTTP与HTTP2?
问题解答
核心结论
HTTP/2 与 HTTP/1.x 不需要拆分到不同端口启用,你遇到的报错是端口监听配置规则导致的,和协议本身的兼容性无关。
问题原因
你当前的配置 KONG_PROXY_LISTEN=0.0.0.0:8000 http2 会强制8000端口仅接收明文HTTP/2(h2c)请求,不会自动兼容HTTP/1.x协议:
- gRPC默认走HTTP/2协议,所以请求可以正常响应
- 你用默认发送HTTP/1.1请求的curl访问时,服务端直接返回HTTP/2二进制帧,curl无法识别为普通文本内容,就会抛出你看到的二进制输出警告。
解决方案
你可以根据业务场景任选一种方案处理:
- 方案1:同端口同时兼容HTTP/1.x和HTTP/2
调整监听配置,开启TLS和ALPN协议协商:
该配置下TLS握手时会自动根据客户端支持的协议,选择使用HTTP/1.x或HTTP/2,无需修改客户端请求逻辑。KONG_PROXY_LISTEN=0.0.0.0:8000 http2 ssl - 方案2:拆分端口分别承载不同协议
分别给普通HTTP服务、gRPC/HTTP2服务分配独立端口:
后续普通HTTP请求走8000端口,gRPC/HTTP2请求走8001端口即可。KONG_PROXY_LISTEN=0.0.0.0:8000, 0.0.0.0:8001 http2 - 方案3:保留当前配置,客户端主动声明HTTP/2协议
无需调整Kong配置,所有访问8000端口的客户端主动指定使用HTTP/2协议即可,比如curl请求添加--http2参数:curl --http2 -X POST localhost:8000/httptest
内容的提问来源于stack exchange,提问作者javadev
相关产品推荐
相关产品推荐

