我有一个基于 Netty 4.1 的服务器。我非常注意让它成为一个行为端正的 HTTP/2 公民。这项工作的一部分涉及处理所谓的“先验知识”和从 HTTP-1.1 升级的场景。
我已经使用curl --http2
(必要时会进行升级)和curl --http2-prior-knowledge
. 它在两种情况下都反应良好,并且符合我的预期。
最近,我发现vegeta
了一个很棒的小负载测试工具。它有一个-h2c
选项,我相信它会做什么curl --http2-prior-knowledge
(没有 TLS 的 HTTP/2 并且没有做“请从 HTTP 1.1 升级我”跳舞。
然而,当我vegeta attack
使用该-h2c
选项访问我的服务器时,即使只使用一个请求(通过-rate=1/2s -duration=2s
),也会vegeta
挂起,无法读取正文:
Error Set:
net/http: request canceled (Client.Timeout exceeded while reading body)
据我所知,vegeta
它是用 Go 编写的,因此可能使用 Goh2c
库。 curl
使用nghttp
. 如果我正确处理curl
's HTTP/2-via-prior-knowledge 请求但vegeta
遇到问题,这是什么意思?