2015-06-19 108 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

相關問題