HTTP/2 packet

HTTPのバージョンが、16年ぶりにバージョンアップされました。
わかりやすいところでは、長らくHTTP/1.1 というなじみがあるヘッダのパケットが、HTTP/2.0になります。
これにともない、各ブラウザが対応し、さらにWireSharkも対応したということで、試してみました。
Webサーバは、Apacheの対応がまだのようなので、nghttp2というライブラリを使ったGo言語の実装を使いました。

参考:nghttp2 を使った Go HTTP/2 server
http://qiita.com/tatsuhiro-t/items/d73376b3eea1d7f4b6a3
https://github.com/tatsuhiro-t/go-nghttp2

htmlページを取得した後、JavaScriptで非同期に3回リクエストをしています。
このような構成にしたのは、通信の効率化に何か差異は見られるかどうかをテストしたかったからです。(SPDYによってソケット数が減るとか・・)
ブラウザはFireFoxを使ってSSLでアクセスしてみました。
http2_4

about:configのhttp2の設定をtrue/falseと変更してHTTP/1.1, 2.0を切り替えます。(falseにすると、サーバがHTTP/1.1のレスポンスを返すことは確認済です。)
http2_1

下は、2.0と1.0のときのパケットの差異です。
http2_3
ClientHelloのパケットのALPNに違いがあることがわかります。2.0(↑)の方が項目が多いです。Follow TCP Streamでみると、2.0が3524bytes、1.1が4667bytesと、通信量が少なくなっていました。(フレーム数はあまり変化なし)

http2_2

ブラウザが2.0に対応しているかどうかは、SSLレベルでサーバに通知しており、HTTPレベル(ヘッダとか)には何も変化はないようです。

一般的な通信で、何か違いを見てみたいという気持ちでテストを始めましたが、期待していたおもしろそうな差異はありませんでした。やはり新たに実装された機能に狙いをつけてテストした方がよさそうです。