8541


<http://syucream.github.io/hpack-spec-ja/header-compression-10-ja.html>

5.2 文字列リテラル表現

> ハフマンエンコードされたデータは常にオクテット境界で終わる
> わけではないので、その後に次のオクテット境界までパディングが挿入されます。このパディングが文字列リテラルの一部だと誤認
> されることを防ぐため、符号の最上位ビットに EOS(end-of-string) に対応するシンボルが使用されます。
>
> EOS シンボルのコードの 最上位ビットに対応しないパディングはデコードエラーとして 扱われなければなりません (MUST) 。

の記述ですが、  
「符号の最上位ビットに EOSに対応するシンボルを使用する」とは具体的にどのように行うのですか？

次のリテラルをハフマンコーディングする場合、

www.example.com

wは「1111000」なので、「1111 0001 1110 0011 1100 0」のように連結していき、最終的に

11110001 f1  
11100011 e3  
11000010 c2  
11100101 e5  
11110010 f2  
00111010 3a  
01101011 6b  
10100000 a0  
10101011 ab  
10010000 90  
11110100 f4  
1 ff

になります。  
最後のオクテットは中途半端な7ビットを1でパディングしています。  
このリテラル文字列のレングスはHビットを立てて12で「8c」。

この中で「符号の最上位ビットに EOSに対応するシンボルを使用する」行為はどこになりますか？

該当箇所の原文

> As the Huffman encoded data doesn't always end at an octet boundary,  
>  some padding is inserted after it, up to the next octet boundary.
>
> To prevent this padding to be misinterpreted as part of the string  
>  literal, the most significant bits of the code corresponding to the  
>  EOS (end-of-string) symbol are used.


CC BY-SA 3.0
2015-03-29T15:19:49.223
8540
2015-03-29T15:47:12.373
2015-03-29T15:35:00.507
3496
3496
question
http http2 hpack
HTTP2のHPACKにおけるEOSの使い方


符号の最上位ビットに EOSに対応するシンボルを使用しているのはこの部分です。

> 最後のオクテットは中途半端な7ビットを1でパディングしています。

EOSの符号は、

> EOS (256) |11111111|11111111|11111111|111111 3fffffff [30]

です。つまりパディングの部分をすべて1で埋めます。


CC BY-SA 3.0
2015-03-29T15:47:12.373
8541
2015-03-29T15:47:12.373
3639
8540
answer