HTTP1.1とSPDYとHTTP2
Published at 2015-01-29
Webの通信プロトコルとして普及するHTTPも、HTTP2に向かって大きな変貌を遂げようとしている。最初期のHTTP0.9からどういう変化をたどってきたのか気になったので、調べたメモ。ネットワーク・HTTPの予備知識にWebにおけるネットワーク通信もどうぞ。
各プロトコルの特徴
HTTP0.9からHTTP1.0になった辺は割愛。ログイン状態みたいに状態を保持する機構のためにCookieが登場したり、80番ポートがデフォルトになったりしたのはこの辺りらしい。
HTTP1.0からHTTP1.1にかけてとそれ以降は、急速に進化し肥大化してきたWebコンテンツを支えるための変遷。データは大きくなるし、リクエストも増加の一途を辿ってきたのでネットワークにも進化が要求されている。
HTTP1.1
- IPアドレスだけでなくホスト名で通信相手を特定できるようになった(HOSTヘッダのサポート)
- TCP接続を維持する機能が追加された(Keep-Alive)
- リクエストヘッダー・レスポンスヘッダーがテキストフォーマット
- ひとつのTCPコネクションにつき、ひとつのリクエストとレスポンス
- それぞれのTCP接続が独立して輻輳制御を行っている
SPDY
- HTTPをベースに高速化が図られた、Googleが開発するプロトコル
- HTTP1.1の作法は変わらないので互換性があり、既存環境とも共存できる
- 接続手順やセッション管理といった部分の効率化がなされた
- セッション層を使うためTLSが必須、つまりHTTPS環境において利用可能
- TLS連携からのプロトコル自動選択や、HTTPヘッダの圧縮
- HTTP2に継承された通信の優先度付多重化とサーバープッシュ
HTTP2
- SPDYをベースに考案されたプロトコル
- リクエストヘッダー・レスポンスヘッダーがバイナリフォーマット
- ひとつのTCPコネクションにつき、複数のリクエストとレスポンスが可能(仮想ストリームチャネルによる多重化)
- クライアントからのリクエストがなくともレスポンスをプッシュできる(サーバープッシュ)
- ストリームに優先度を指定可能で、後方のリクエストでも前方のリクエストより優先度が高ければそちらを優先して返却する(HTTP2プライオリティ)
- ブラウザでは最新のChromeとFirefoxで有効であり、IEではテクニカルプレビュー
- HTTP・HTTPS(平文でもOK)を問わず、TLS利用は必須ではない
- chrome://net-internals/#spdy
仕様策定については、RFC標準化目前ぽい。IETFのHTTPワーキンググループがメンテナンスしているHTTP2の公式サイトにも、デカデカと書かれている。
IETF Last Call
HTTP/2 and HPACK are currently in IETF Last Call.
HTTP/2とService Workerで実現するWeb Push
Service Workerに関する仕様とか機能とかの最後で触れているが、Push APIというものがある。こちらはお待ちかねのWebでPushを実現するAPIだが、このサーバーから送られるメッセージはService Workerが受け取る、つまりPush APIの利用にはService Workerが要るわけだ。更に、HTTP1.1まで出来なかったサーバーからのPushは、HTTP2の双方向シーケンスによって可能になる。何が言いたいかというと、Web Pushは両者によって初めて成り立つ機能ということ。以下、ざっくりとした手順。
- Service Workerがプッシュサーバーに対し、クライアントの登録をする
- プッシュサーバーにポーリングしつつ、通知用のプッシュチャネルを作成する
- プッシュサーバーへの登録情報をアプリケーションサーバーに登録する
- アプリケーションサーバーに通知イベントが発生したら、プッシュサーバーにデータを渡す
- 通知用に作成されたプッシュチャネルを使って、プッシュサーバーからService Workerにデータを渡す
詳細はService WorkerとHTTP/2が切り開く新しいWeb Pushの世界という記事を見て下さい。死ぬほどわかりやすいです。
双方向通信といえばWebSocketを思い出す。Service WorkerコンテキストにもWebSocketはいるみたいだし、同じようなことをWebSocketでやる話ってあるんだろうか。HTTP2でWebSocketを取り込む話をどこかでチラッと見かけた気がする。けど、気のせいかもしれない。この辺の情報、誰か下さい(´・ω・`)
参考リソース
- SPDY - The Chromium Projects
- HTTP/2の現状とこれから - SlideShare 2015年1月25日
- A Simple Performance Comparison of HTTPS, SPDY and HTTP/2 - HttpWatch 2015年1月16日
- HTTP/2 を追いかけて - SummerWind 2014年12月25日
- Service WorkerとHTTP/2が切り開く新しいWeb Pushの世界 - 2014年12月4日
- HTTP/2 入門 - Yahoo Developer Network 2014年6月19日
- Web表示の高速化を実現するSPDYとHTTP/2.0の標準化 - IIJ 2013年8月6日
- 変わるWebプロトコルの常識(SPDY, HTTP2.0編) - HTML5Experts.jp 2013年7月9日