【问题标题】:Can httptest be used to test HTTP/2?httptest 可以用来测试 HTTP/2 吗?
【发布时间】:2016-06-04 03:07:32
【问题描述】:

我想知道this (httptest) 包是否可用于测试 HTTP/2 特定功能。
谁能给我举一些例子吗?

我知道工具 h2i,但它是一个交互式工具。
我正在寻找可编程的东西。

编辑
我真正需要的是一种工具,例如,我可以在其中启动服务器推送并在客户端对其进行测试。
那么,使用这个包,我如何访问它默认使用的底层 HTTP/2 内容?

编辑 2:
在 nghttp2 源代码中找到了一些示例: https://github.com/tatsuhiro-t/nghttp2/tree/master/integration-tests

编辑 3: 对我来说,看起来包 net/http2 并不意味着任何人都可以直接使用。我将尝试使用this 之一。

【问题讨论】:

  • 如果您使用的是 1.6,对 HTTP/2 的支持将透明地添加到 HTTPS 的 net/http(我想,因此也会添加到 net/http/httptest)。
  • 你到底想做什么?你在测试什么?就像 muru 说的,httptest 使用的是 http 包。
  • 以下内容可能对您有所帮助。How to test http calls in go using httptest
  • 这个package 建立在httptest 之上,您可能会感兴趣。
  • 你使用的是http,而不是测试http的实现。

标签: go automated-tests http2


【解决方案1】:

一般测试提示(避免沮丧)!

不要使用 Fiddler 来测试它,它会进入您的浏览器和服务器之间并中断 HTTP2 连接。

没有 HTTP2 - 没有推送。

【讨论】:

  • 你知道 BurpSuite 是否也是这样吗?
  • 我从未听说过它,但我想这两者之间的任何东西都会做同样的事情,除非它明确表示它可以处理它。我想也许有一天 fiddler 会添加 http/2 调试功能(如果他们还没有的话)。除了服务器推送和单一连接之外,一切仍然有效。因此,只需在测试期间禁用它并使用浏览器的网络选项卡来验证推送是否正常。
  • 感谢您的解释。
【解决方案2】:

https://github.com/summerwind/h2spec 是一个测试服务器实现是否符合 RFC 7540 的 go 程序。它允许制作单独的 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)

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2013-04-15
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多