HTTP/2 GZIPPED_DATA フレームとは

このエントリは、 http2 advent calendar の 8 日目の穴埋めです。


HTTP/2にGZIPPED_DATAフレームという拡張フレームを追加する提案が提出されている。フレームの追加に伴って、エラーコード・Settingsも追加される。


HTTP/2 Gzipped Data
https://tools.ietf.org/html/draft-kerwin-http2-encoded-data-07

SETTINGS_ACCEPT_GZIPPED_DATA

SETTINGS_ACCEPT_GZIPPED_DATA(value = 1)は、送信者がGZIPPED_DATAフレームを受信できる旨通知するのに使用する。
エンドポイントはこのSETTINGS_ACCEPT_GZIPPED_DATAを受信するまでGZIPPED_DATAフレームを送信してはいけない(MUST NOT)


SETTINGS_ACCEPT_GZIPPED_DATA(value = 0)を送信し、それ以上のGZIPPED_DATAフレームを送信しないように通知することもできます。

GZIPPED_DATA

GZIPPED_DATAフレームは、DARAフレームと意味的には一緒ですが、ペイロード部分がgzipで圧縮されています。
DATAフレームとGZIPPED_DATAフレームの順番は重要ですし、フロー制御の対象となります。


Gzip圧縮は32bitのCRCを伴うLZ77コーディングです。


フォーマットは以下の通りです。Dataフレームと同じパラメータを持ちます。

     +---------------+
     |Pad Length? (8)|
     +---------------+-----------------------------------------------+
     |                            Data (*)                         ...
     +---------------------------------------------------------------+
     |                           Padding (*)                       ...
     +---------------------------------------------------------------+


仲介者は、PeerがACCEPT_GZIPPED_DATAを送信してきてない場合は、このGZIPPED_DATAフレームをデコードして送信しなければなりません(MUST)


GZIPPED_DATAフレームのペイロードが正しくエンコードされていなかった場合(たとえば、チェックサム値が不正)、ストリームエラーとして扱わなければなりません(MUST)。


仲介者が片方からDATA_ENCODING_ERRORを受け取った場合、もう片方に伝播するべきです。

DATA_ENCODING_ERROR

"DATA_ENCODING_ERROR"は、相手が正しく名円コーディングでGZIPPED_DATAを送信してきたことw検地したことを示します。