Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
httpbis interim と
HTTP/2.0相互接続試験の話
HTTP/2.0 勉強会@IIJ
2013年8月14日
IIJ 大津 繁樹
自己紹介
• 株式会社インターネットイニシアティブ(II
J)
• プロダクト本部戦略的開発部
• twitter: @jovi0608
• github: https://github.com/shigeki/
• ブログ: http://d.hatena.ne.jp/jovi0608/
• Node とか、HTML5とか、HTTP/2.0とか、流行そ
うな技術の評価検証してます。
• 最近、HTTP/2.0仕様修正やNode.js のHTTP/2.0モ
ジュールの開発をしています。(実装の詳細に
関しては来週の Node学園祭で発表予定)
内容
1. httpbis interim(中間会議) で議論した大
きめなトピックについて解説
1. HTTP-draft-05/2.0 の話
2. HPAC(Header-Compression改名)の話
2. HTTP/2.0相互接続試験の話
3. 今後のHTTP/2.0仕様化のロードマップ
~ HTTP/2.0の仕様作成作業 ~
githubを使ってます。
editorial fix → Pull Request OK, design issue -> issue 登録後、 MLに出す。
github 上のコメントで議論が白熱 → MLに出せと怒られる
第3回 httpbis interim@ハンブルグ
第87回 IETF Mtg@ベルリンの翌週
8/5(月) ~ 8/7(水) Adobe@ハンブルグで開催
httpbis interim アジェンダ
• 1日目
– Implementation Feedback
– Issue 議論・整理
• 2日目
– 相互接続試験
• 3日目(半日)
– Issue 議論・整理
– 次のロードマップ
draft-04を元に各自がHTTP/2.0 の実装を持ち寄
り、初めて接続試験を行った記念すべき会議
大きめの議論トピックス(その1)
やっぱALPNじゃなくてNPNがいい。
• “Hitting some limit which causes bugs. ALPN can
just cause timeouts” by Patric, Mozilla
– 256バイト以上のHelloでバグる実装があるみたい。(某L
B)
– だからALPNでクライアントから送るデータが増えるのヤ
ダ。
– やっぱクライアント側でコントロールしたいね。
• ALPNのプロトコル選択は平文で見えちゃう。
– プライバシーの問題がないかい?
• NPNとALPNの併用が結構大変よね。移行どう
するねん。(by G)
• ALPN仕様、実はexp-HTTP/2.0 という名称にしない
と・・・
大きめの議論トピックス(その2)
CONTINUEフラグはアカン、使
えん!
HEADERS +
END_HEADERS flag
HEADERS +
CONT flag
HEADERS +
END_HEADERS
flag
HEADERS +
CONT flag
ストリー
ム生成開
始
続きの
2個目だ
よ
1個目だ
よ
終りだよ
draft-04 では、
ストリー
ム生成開
始
大きめの議論のトピックス(その2)
CONTINUATIONフレームの新設
HEADERS
CONTINUEATION
+ END_HEADERS
CONTINUATION
続きの
2個目だ
よ
1個目だ
よ
続き
の終りだ
よ
draft-05 では、
ストリー
ム生成
大きめの議論のトピックス(その3)
Server Pushを完全に禁止したい
draft-04 では、
SETTINGS
MAX_CONCURRENT_STREAMS: 0
PUSH_PROMISE
でもPUSH PROMISEは
送れちゃうもんね。
1. 同時オープン0は仕様で PUSHを禁止させる?
2. RSTする?
3. 新たにPUSH禁止設定を導入する?
大きめの議論のトピックス(その3)
Server Pushを完全に禁止したい
draft-05 では、2を採用
PUSH_PROMISE
RST_STREAMでみんな
撃墜してやる!
RST_STREAM 迎撃
大きめの議論のトピックス(その4)
Header-Compression-01あかんじゃん!
working set
foo0, bar0, index0
foo1, bar1, index1
Header Table (request)
0, :scheme, http
1, :scheme,https
2, :host,
3, :path, /
4, :method, GET
5, accept,
index0, foo0, bar0
index1, foo1, bar1
・・・
36, via,
37, warning,
reference set
foo0,bar0
foo1, bar1
name,value
index
デコード時 workng_set に問題が!
インデック
スをなめる
ので O(N^2)
の計算量が
要
でかいヘッ
ダが送られ
て来たらメ
モリ枯渇し
ちゃう
eviction時に
インデック
スがずれ
ちゃう
でかいリ
テラル
ヘッダ
大きめの議論のトピックス(その4)
HPAC誕生!
Header Table (request)
0, :scheme, http
1, :scheme,https
2, :host,
3, :path, /
4, :method, GET
5, accept,
index0, foo0, bar0
index1, foo1, bar1
index5, foo5,
・・・
36, via,
37, warning,
38, foo5, bar5
reference set
foo0,bar0
foo1, bar1
0 1 0 index5
bar5 length
bar5 string
header set
foo5
emitted
emit
Literal + Increment
working setを作らず、emitによる逐次処理に変
更。メモリ制限も対応、ストリームとして扱う
ことも可能に。
draft-04 実装リスト
https://github.com/http2/http2-spec/wiki/Implementations
名称 実装言語 Client,Server,
Intermidate
ニゴシエーション
1 nghttp2 C S, C, I NPN, Upgrade, Direct
2 http2-katana C# S, C Upgrade, ALPN
3 node-http2 Node.js S, C direct
4 Mozilla Firefox C++ C ALPN, NPN
5 http2-perl Perl S, C NPN
6 iij-http2 Node.js S, C NPN, Client Upgrade, Direct
7 Akamai Ghost C++ I NPN
8 Chromium C++ C ALPN, NPN
9 Google Front End C++ I ALPN, NPN
10 Twitter Java S, C ALPN, NPN
Node.js によるフルスクラッチ実装 iij-http2 を開発
世界初のHTTP/2.0相互接続試験やりました
HTTP/2.0 接続成功!
iij-http2 <-> HTTP/2.0 Chrome
iij-http2の相互接続試験結果
名称
1 nghttp2 成功。バク発見していただきました。
2 http2-katana Upgradeのバグ修正が完了せず。帰国後成功
3 node-http2 成功。先方のバグ発見。修正済。
4 Mozilla Firefox 成功。 closed state仕様のバグ発見、仕様改訂済
5 http2-perl 未試験(試験準備できなかった)
6 iij-http2 N/A
7 Akamai Ghost 成功。Proxy対応へコードを改良が必要だった。
8 Chromium 成功。PINGで不具合有。Chrome側が修正。
9 Google Front End 未試験(間に合わなかったみたい)
10 Twitter 未試験(間に合わなかったみたい)
この先のロードマップ
• Second Implementation Drafts -06 :21 August 2013
• Header Compression Interop Harness :10 September 2013
• Interop Dashboard : September 2013
• 9-11 October 2013 Interim : Seattle(?) US hosted by MS
• November 2013 89th IETF : Vancouver CA
• January 22-24 2014 Interim : Zurich CH hosted by Cisco
• HPACはやっぱり心配だからちゃんとテストしよう。
• QAチームも一緒にやりたいね。
• interim 前にバーチャル相互試験をやろう。

More Related Content

httpbis interim とhttp2.0相互接続試験の話