Chrome Canary不提供HTTP / 2

时间:2015-06-19 18:07:55

标签: http2

我试图在C#中实现一个小的HTTP / 2服务器,以便了解协议。我正在运行Chrome最新的canary版本(v 45.0.2436.5),但我似乎无法让客户端协商升级到HTTP / 2连接。

RFC声明如下:

  

请求" http"的客户端没有事先的URI   有关在下一跳上支持HTTP / 2的知识使用HTTP   升级机制([RFC7230]第6.7节)。客户这样做   发出包含Upgrade头字段的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

有人可以向我解释为什么会这样吗?

提前感谢您的回答!

1 个答案:

答案 0 :(得分: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。

例如,nghttp2curl

对于Java,您可以按照here的说明使用Jetty的HttpClient。

我不了解HTTP / 2 C#客户端,也许您可​​以查看其他实现here