【发布时间】:2017-10-06 18:27:58
【问题描述】:
我正在尝试编写一个 Go 客户端来测试我们的 http/2 基础架构。我想向https://mydomain.tld/somePage 发出一个http 请求,并希望收到一个html 响应,以及几个推送的资源。我想确保这些推送成功,否则失败。
我不清楚标准库的任何部分是否公开了我需要的这个功能。
我可以查看响应并检查协议版本以检测 http2。
我可以在来自https://http2-push.appspot.com/ 等发送推送的网站的响应中看到Link 标头,但我不太清楚链接标头和实际推送承诺帧之间的关系。您可以通过 http 1.1 获取链接标头,因此我不确定仅此一项能否确保推送会发生。
http2 package 有一个较低级别的Framer 接口,我可以利用它来验证原始帧,但老实说,我不知道如何设置一个并向它发出初始请求。
是否有 go 客户端如何验证 http2 推送资源的正确配置的示例?
【问题讨论】:
-
我知道他们最近有一篇关于服务器推送的博文 (blog.golang.org/h2push),但我还没有看到任何关于客户端的信息。据我了解,H2 推送通过将响应(通过制造请求并将该请求和响应包括在一起)推送到将响应直接存储在其缓存中的客户端来工作。结果是当客户端发出请求而不是通过网络时,它引用其本地缓存。这预计将内置在支持 h2 的浏览器中,无论该语言的 http 客户端是否本机支持它都需要一些挖掘。
-
对。我实际上不需要客户端支持来接收推送,我只需要真正验证“如果我是浏览器,服务器配置为正确推送这些东西”
-
查看test suite 似乎需要私有方法(例如decodeHeader)才能实际获取该数据,而there isn't much discussion about a proper client API。
-
这有点令人沮丧@nothingmuch。也许答案是“未来某个时候”?
-
也许你的案例是一个很好的激励例子,可以鼓励在这方面取得进展?我鼓励您参与讨论,因为您的测试用例似乎是在开始使用此类功能时尝试验证的非常基本的事情,我认为值得提出。另一个想法是使用node-http2 之类的东西,我想从 Go 测试中调用它很容易,尽管我不确定是否值得拥有另一个开发堆栈,即使是机会主义。跨度>