2013年 12月 27日

SPDY とか新しいプロトコルがよくわからないので簡単にまとめた

HTTP 0.9

RFC (rfc:1945) は1996年 (HTTP 1.0と同じRFCで説明されてる)

最初の HTTP。GET メソッドしかなかった。レスポンスヘッダもない (ボディーだけ)。

HTTP 1.0

RFC (rfc:1945) は1996年

  • メソッドに GET POST HEAD が追加された
  • ヘッダが追加された

HTTP 1.1

RFC (rfc:2068 → rfc2616) は1997年

HTTP 1.0 に Keep Alive とかを追加したやつ。

  • バーチャルホストに対応 (Host ヘッダが必須に)
  • Keep Alive が可能
    • 1つのTCPセッションで複数のファイルのやりとりができる
  • リクエストパイプラインが可能
    • リクエストを複数個レスポンスを待たずに送ることができる
    • サーバ側で対応が必要なのであまり有効活用されてない

HTTPS

RFC (rfc:2817, rfc:2818) は2000年

HTTP 1.0 または 1.1 を TLS (暗号化層) にのっけたもの (暗号化通信)

(SSL は TLS の元になったプロトコルの名前)

WebSocket

RFC (rfc:6455) は2011年。HTTP を拡張したもの、と言っていいか微妙だけど、HTTP でセッションを初期化して 101 Switching Protocols で専用プロトコルに切り替わる関連技術的なもの。

  • ブラウザでソケットのようにサーバと自由に送受信ができるようにするのが目的
  • サーバプッシュが可能
  • 普通 JS と一緒に使う

SPDY

Google が作ったプロトコル。現在は SPDY Protocol - Draft 3.1 が最新。

  • レンテンシを低くするのが目的
  • HTTPS のように TLS (暗号化層) にのっかってるので、常に暗号化通信
  • HTTP は SPDY プロトコル上にのっかる感じに
  • サーバープッシュが可能
  • サーバーヒント
    • 予め必要そうなファイルをサーバから送りつけることができる

HTTP 2.0

SPDY を元に提唱されてる新しい HTTP のバージョン。SPDY を HTTP 2.0 として標準化しよう、って感じかな。現状では SPDY と一緒。

QUIC

Google が作ってるあたらしいプロトコル。上記までのような HTTP の互換レイヤーの話ではなく、その下のレイヤーのプロトコル。

  • レンテンシを低くするのが目的
  • TCP の代替

技術の発展とともに TCP がネックになることが増えてきたので、UDP を使って TCP+TLS レイヤーを実装しなおすという感じ。

わからないところ

未来における WebSocket の立ち位置がよくわからない。HTTP 2.0 になったとして (SPDY 実装はすすんでいるし、たぶんなるだろう)、WebSocket はどうなるだろう。HTTP 2.0 上で WebSocket を使うのか、あるいは HTTP 2.0 のセッションを JS からコントロールできるような API が整備されるのか。