7. SPDYヘッダのEXI圧縮
p SPDYヘッダフォーマット
ヘッダ項目数
全体を
GZIP圧縮
ヘッダの名前
ヘッダの値
+------------------------------------+
| Number of Name/Value pairs (int32) |
+------------------------------------+
| Length of name (int32) |
+------------------------------------+
| Name (string) |
+------------------------------------+
| Length of value (int32) |
+------------------------------------+
| Value (string) |
+------------------------------------+
| (repeats) |
p HTTPヘッダのEXI表現
url: index.html
user-agent: my-agent
x-my-header: first
<url>index.html
</url>
<user-agent>my-agent
</user-agent>
<x-my-header>first
</x-my-header>
HTTPヘッダ
テキストXML
91
1c
dd
cb
cc
06
0e
dd
9b
8c
9a
7b
cb
cb
fc
1d
cb
9b
05
03
1d
dd
cc
cb
0b
バイナリXML
8. HTTPヘッダの冗長性
p 共通ヘッダ項目のインデックス化が有効
Google Response #1
Similarity
Google Response #2
Status
200 OK
SAME
Status
200 OK
Version
HTTP/1.1
SAME
Version
HTTP/1.1
Server
Chunked Update Server
SAME
Server
Chunked Update Server
Cache-Control
public,max-age=172800
SAME
Cache-Control
public,max-age=172800
X-XSS-Protection
1; mode=block
SAME
X-XSS-Protection
1; mode=block
Date
22 Feb 2011 09:38:55 GMT
DIFF
Date
22 Feb 2011 09:38:17 GMT
Age
12
DIFF
Age
51
Content-Length
765
DIFF
Content-Length
7907
HTTPサーバのレスポンスは同一のヘッダ項目から構成されていることが多い
9. Header Diffの誕生
p ヘッダテーブルと名前テーブルを定義
リクエストヘッダとレスポンスヘッダのテーブルは独立
n ヘッダテーブルにはヘッダ名とヘッダ値のペアを登録
n 名前テーブルにはヘッダ名を登録(ヘッダ名のインデックス化)
n よく使うヘッダ名を名前テーブルの先頭にあらかじめ定義
n
Index
Header Name
Index
Header Name
0
accept
0
age
1
accept-charset
1
cache-control
2
accept-encoding
2
content-length
3
accept-language
3
content-type
4
cookie
4
date
…
…
…
…
36
warning
35
www-authenticate
リクエスト名前テーブル
レスポンス名前テーブル
10. Header Diffのインデックス処理
p ヘッダテーブルの内容との差分情報を送信
新規のヘッダ項目はリテラル表現(ヘッダテーブルに追加)
n 既出のヘッダ項目はインデックス表現(ヘッダテーブルは不変)
n 値が異なるヘッダ項目はデルタ表現(ヘッダテーブルを更新)
n
[リクエスト①]
url: index.html
user-agent: myagent
x-my-header: first
リテラル
リテラル
リテラル
[リクエスト②]
url: script.js
user-agent: myagent
x-my-header: second
デルタ
インデックス
リテラル
Index
Header Name
Value
Index
Header Name
Value
0
url
index.html
0
url
script.js
1
user-agent
my-agent
1
user-agent
my-agent
2
x-my-header
first
2
x-my-header
first
…
3
x-my-header
second
リクエスト①処理後のヘッダテーブル
リクエスト②処理後のヘッダテーブル