EagleLand

2015.01.29

HTTP1.1とSPDYとHTTP2

Webの通信プロトコルとして普及するHTTPも、HTTP2に向かって大きな変貌を遂げようとしている。最初期のHTTP0.9からどういう変化をたどってきたのか気になったので、調べたメモ。ネットワーク・HTTPの予備知識にWebにおけるネットワーク通信もどうぞ。

各プロトコルの特徴

HTTP0.9からHTTP1.0になった辺は割愛。ログイン状態みたいに状態を保持する機構のためにCookieが登場したり、80番ポートがデフォルトになったりしたのはこの辺りらしい。

HTTP1.0からHTTP1.1にかけてとそれ以降は、急速に進化し肥大化してきたWebコンテンツを支えるための変遷。データは大きくなるし、リクエストも増加の一途を辿ってきたのでネットワークにも進化が要求されている。

HTTP1.1

SPDY

HTTP2

仕様策定については、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は両者によって初めて成り立つ機能ということ。以下、ざっくりとした手順。

  1. Service Workerがプッシュサーバーに対し、クライアントの登録をする
  2. プッシュサーバーにポーリングしつつ、通知用のプッシュチャネルを作成する
  3. プッシュサーバーへの登録情報をアプリケーションサーバーに登録する
  4. アプリケーションサーバーに通知イベントが発生したら、プッシュサーバーにデータを渡す
  5. 通知用に作成されたプッシュチャネルを使って、プッシュサーバーからService Workerにデータを渡す

詳細はService WorkerとHTTP/2が切り開く新しいWeb Pushの世界という記事を見て下さい。死ぬほどわかりやすいです。

双方向通信といえばWebSocketを思い出す。Service WorkerコンテキストにもWebSocketはいるみたいだし、同じようなことをWebSocketでやる話ってあるんだろうか。HTTP2でWebSocketを取り込む話をどこかでチラッと見かけた気がする。けど、気のせいかもしれない。この辺の情報、誰か下さい(´・ω・`)

参考リソース

タイトルと URL をコピーしました