HTTP2.0のdraft01からの変更点について

HTTP2.0の仕様は現在githubで編集されており,誰でも最新版を閲覧できる。(URL)


SPDY draft03のコピーから開始されたHTTP2.0の策定だが、最新版ではHTTP2.0 draft01(URL)より何点か変更されている。(現在の最新版"March 29, 2013"で説明します。)


全てを追い切れてる訳ではないので、詳しくはMLやgithubのcommitログを見て欲しい...orz


「zlib方式のヘッダ圧縮の削除」

draft01はSPDY同様zlib方式でヘッダ圧縮をしており、辞書の定義もされていた。
現在、ヘッダ圧縮は差分方式の圧縮手法について検討されており、zlib方式の記述は削除された。
検討されている圧縮アルゴリズムは主に以下の二つである。(MLのURL)

「クレデンシャルフレームの削除」

クレデンシャルフレームに関する文章が削除された。(URL)

「フロー制御の実装方針について」

フロー制御の実装は難しいとしており、実装の方針を示している。
Principles for Flow Control(URL)の取り込み

  • ホップバイホップ(client-server,client-proxy,proxy-server間)でフロー制御を行う。
  • Window_Updateメッセージにもとづいて行う。
  • フロー制御は向きを持ち、受信側によって決定される。

など

「セッションヘッダの追加」

ネゴシエーション後、仮にHTTP1.xで通信を行ってしまった場合には、直ちに切断できるようにするための文字列をセッションヘッダとして送信する(HTTP1.xの実装では改行文字を待ち続けるものもあるため、改行コードを入れることですぐに通信失敗することが出来る)。具体的には、現在は「the string FOO * HTTP/2.0\r\n\r\nBAR\r\n\r\n」の文字列を送信する。

「データフレームとコントロールフレームのフレームヘッダの説明を一元化」

データフレームとコントロールフレームで定義していたフレーム構造をフレームヘッダとして説明を一元化した。

「セッションレベルでのフロー制御の追加」

ストリームごとのフロー制御しか定義されていなかったが、セッションレベルのフロー制御が定義された。
WINDOW_UPDATEフレームでストリームの識別子として0を指定すると、セッションレベルでのフロー制御を指定できるようになった。

「Security ConsiderationsにCacheability of Pushed Resourcesの追加」

クライアント側のサーバプッシュにて得られたリソースのキャッシュとしての扱い方について。

「SYN_STREAMフレーム、SYN_REPRYフレームの削除、HEADERS+PRIORITYフレームの追加」

SYN_STREAMフレームをHEADERS+PRIORITYフレームに変更し、プライオリティとヘッダーブロックを持つフレームとして定義した。
SYN_REPRYは削除された。(ML URL)

「PUSH_PROMISEフレームの追加」

HEADERS+PRIORITYフレームにはAssociated-Stream-IDはなく、Server Pushのために新しく定義された。
関連付けられたストリームを示すAssociated-Stream-IDと、将来送信するストリームを示すPromised-Stream-IDを持つ。(Issue URL)

「エラーコードの再定義」

RST_STREAMとGOAWAYで用いられるエラーコードについて、エラーコードを統一した。

「認証に関する文章の削除」

Basic認証、Digest認証、NTLM認証などについて言及していた部分の削除。(Issue URL)