ChromeがWebSockets over HTTP/2に対応したので試す (RFC8441)

2018/09/19追記
RFC 8441 として標準化されました


以前書いたとおり、Websockets over HTTP/2の仕様である「Bootstrapping WebSockets with HTTP/2」が現在標準化が進められている。
asnokaze.hatenablog.com

これにより、複数のWebsocket通信が1つのTCPコネクションに束ねられる。

一つのページで複数WebSocketを使っていたり、複数タブを開いて各ページでWebSocketを利用しているとどうしてもコネクションの本数が多くなってしまう。様々なメリットがあるが、コネクションの数がへらせるのはサーバ側でも嬉しい部分がある。

もちろんひとつに束ねられたWebSocketをばらして処理をする必要があり、サーバやProxy側の実装が整う必要はある。

さて、このWebsockets over HTTP/2にChrome Canaryが対応したので実際に試してみる。

WebSockets over HTTP/2

「WebSockets over HTTP/2」の概要に簡単に触れる

WebSockets over HTTP/2を利用するにはサーバ側からSETTINGSフレームで「ENABLE_CONNECT_PROTOCOL = 1」を送る必要がある。そのため、既存のサーバに対してブラウザが勝手にHTTP/2でWebScoket通信を試みるようなことはない。

具体的な通信手順は以前書いた時より仕様が進んでおり、HEADERSフレームを使用するようになっている。
f:id:ASnoKaze:20180310012152p:plain:w400

Chromeで Websockets over HTTP/2を有効にする

現状はChrome Canaryで有効にすることが出来る。
起動オプションに "--enable-websocket-over-http2"を与えて起動すると、Websockets over HTTP/2が有効になる。

Chromeの実行パスがわからない場合は、URLバーにchrome://version/と打ち、コマンドラインの項目から確認できる

試す

ざっくり適当に、モックサーバを用意した。

f:id:ASnoKaze:20180310014954p:plain

HTTP/2で接続しにいって、WebSocketのonopenイベントが発火するところまで確認した。
(地味な動作確認画面だ...)