プロトコルを理解するために、C# で小さな HTTP/2 サーバーを実装しようとしています。Chrome の最新のカナリア ビルド (v 45.0.2436.5) を実行していますが、HTTP/2 接続へのアップグレードをクライアントに交渉させることができないようです。
RFC には次のように記載されています。
ネクスト ホップでの HTTP/2 のサポートに関する事前知識なしに「http」URI を要求するクライアントは、HTTP アップグレード メカニズムを使用します ([RFC7230] のセクション 6.7)。クライアントは、"h2c" トークンを含む Upgrade ヘッダー フィールドを含む HTTP/1.1 要求を作成することによってこれを行います。
最初のリクエストには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
なぜこれが起こるのか、誰かが私に説明できますか?
回答ありがとうございます!