我正在与一个服务器交互(这是我无法控制的),如果请求包含内容(POST、PUT、PATCH和有效负载),服务器不会执行协议升级。不清楚服务器的确切问题是什么,但我注意到,当我使用--http2-prior-knowledge
查询时,协议升级了:
❯ curl -i -PUT --http2-prior-knowledge http://localhost:8081/document/v1/foo -d '{"fields": {"docid": "123"}}'
HTTP/2 200
date: Tue, 08 Nov 2022 13:26:50 GMT
content-type: application/json;charset=utf-8
vary: Accept-Encoding
content-length: 78
没有--http2-prior-knowledge
的相同请求在HTTP/1.1上被卡住了。
❯ curl -i -PUT --http2 http://localhost:8081/document/v1/foo -d '{"fields": {"docid": "123"}}'
HTTP/1.1 200 OK
Date: Tue, 08 Nov 2022 01:37:17 GMT
Content-Type: application/json;charset=utf-8
Vary: Accept-Encoding
Content-Length: 78
当我用Go语言的默认客户端调用这个API时,协议没有升级。
我想我需要理解的是,如何在Go语言中模仿curl的先验知识标志,这可能吗?
1条答案
按热度按时间ahy6op9u1#
我通过指定一个跳过TLS拨号的自定义
http2.Transport
解决了这个问题。回想起来,理想的解决方案是使用SSL证书(自签名就足够了),这将更好地保证HTTP2的使用。和链接: