2015-06-19 63 views
0

我想在C#中实现一个小的HTTP/2服务器,以了解该协议。我运行的是Chrome最新的canary build(v 45.0.2436.5),但我似乎无法让客户端协商升级到HTTP/2连接。铬金丝雀不提供HTTP/2

的RFC指出以下:

客户端,使得无需事先 知识约支持HTTP/2上的下一跳的“HTTP” URI的请求使用HTTP 升级机构(节6.7 [RFC7230])。客户端通过 发出的HTTP/1.1请求包含一个带有 “h2c”标记的升级标题字段。

这使我相信第一个请求应该包含一个Upgrade标题,但它不会。这是我得到的要求:

GET/HTTP/1.1 
Host: 127.0.0.1:1234 
Connection: keep-alive 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2436.5 Safari/537.36 
HTTPS: 1 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 

任何人都可以向我解释为什么会发生这种情况?

在此先感谢您的答案!

回答

2

Chrome并未实现HTTP/1.1升级到HTTP/2。它只通过ALPN实现通过TLS的HTTP/2。

Firefox也是如此。

浏览器通常倾向于使用TLS,因为IETF和Web一般都在朝着“所有TLS”的方向发展。此外,使用TLS可以在连接建立中获得更高的成功率。 由于这些原因以及其他原因,目前为止还没有浏览器实现明文升级机制(这是规范所不需要的)。有传言称Internet Explorer 11将支持HTTP/1.1升级到HTTP/2,但我不确定它是否已经可用。

与此同时,还有其他一些(命令行)工具可以执行HTTP/1.1升级到HTTP/2。例如或curl

对于Java,您可以使用Jetty的HttpClient,如here所述。

我不知道HTTP/2 C#客户端,也许你可以看看其他实现here

+0

感谢您的回答!这似乎很合乎逻辑,虽然它会很高兴为Chrome提供纯文本升级 – HackerCow

相关问题