可以使用httptest来测试HTTP/2吗?

13
我想知道httptest(一个包)是否可以用来测试HTTP/2特定的功能。有没有人能提供一些例子?
我知道工具h2i,但它是交互式的。我正在寻找一些可编程的东西。
编辑:实际上我在寻找一种工具,例如我可以启动服务器推送并在客户端测试它。那么,使用这个包,如何访问它默认使用的底层HTTP/2内容?
编辑2:在nghttp2源代码中找到了一些例子:https://github.com/tatsuhiro-t/nghttp2/tree/master/integration-tests 编辑3:对我来说,net/http2包似乎不是直接供任何人使用的。我将尝试使用this

1
如果您使用的是Go 1.6,则对于HTTPS,net/http会自动添加对HTTP/2的支持(我想,这也会相应地添加到net/http/httptest中)。 - muru
你到底想做什么?你在测试什么?就像muru所说,httptest使用http包。 - JimB
1
以下内容可能会对您有所帮助。如何使用httptest在Go中测试http调用 - Johnson
这个是基于httptest构建的,可能会引起你的兴趣。 - Pandemonium
您正在使用 HTTP,而不是测试 HTTP 实现。 - Jiang YD
2个回答

1

一般测试技巧(避免沮丧)!

不要使用Fiddler进行测试,它会介入浏览器和服务器之间并破坏HTTP2连接。

没有HTTP2 - 没有推送。


你知道BurpSuite是否以同样的方式执行吗? - Just a learner
1
我从未听说过这个,但我想任何中间件都可以做同样的事情,除非它明确表示可以处理它。我想也许有一天Fiddler会添加HTTP/2调试功能(如果他们还没有)。此外,除了服务器推送和单个连接之外,一切仍将正常工作。因此,在测试期间只需禁用它,并使用浏览器的网络选项卡来验证推送是否正常工作即可。 - Simon_Weaver
感谢您的解释。 - Just a learner

0

https://github.com/summerwind/h2spec 是一个 Go 语言编写的程序,用于测试服务器实现是否符合 RFC 7540 标准。它允许构建单个 HTTP/2 帧,例如:

    settings := http2.Setting{http2.SettingInitialWindowSize, 0}
    http2Conn.fr.WriteSettings(settings)

或者

    var hp http2.HeadersFrameParam
    hp.StreamID = 1
    hp.EndStream = false
    hp.EndHeaders = true
    hp.BlockFragment = http2Conn.EncodeHeader(hdrs)
    http2Conn.fr.WriteHeaders(hp)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接