我需要有一个“主机”标头并向需要该标头的自定义服务器发出 HTTP/2 请求。
当我使用 HTTP/1.1 请求时,标头存在,但一旦我这样做,
DefaultRequestVersion = new Version(2, 0)
它就会消失,我正在使用 mitmproxy 来检查它。
我尝试过
DefaultRequestHeaders.Add("host", "somespecifichost")
,但它被 HTTP/2 忽略。
我可以尝试什么来强制执行标头?
如果您无法强制客户端发送
Host
标头,您的另一个选择是尝试在服务器上合成它,然后再到达应用程序。
根据您使用的服务器,它可能会提供一些“拦截”机制,允许您根据请求的某些其他元素添加标头。
在本例中,您希望从 HTTP/2 伪标头
Host
合成 :authority
标头。
另一种选择是在服务器之前访问反向代理。
反向代理可以卸载 TLS,合成
Host
标头,然后以明文 HTTP/2 调用服务器(或以明文 HTTP/1.1 重新编码请求)——无需重新编码-加密,尽管你可以。