このエントリは、 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検地したことを示します。