18
httpbis interim と HTTP/2.0 とととととととと HTTP/2.0 ととと@IIJ 2013 と とと と と 814 とと とと IIJ

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

Embed Size (px)

Citation preview

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

httpbis interim とHTTP/2.0 相互接続試験の話

HTTP/2.0 勉強会@IIJ2013 年8月14日

IIJ 大津 繁樹

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

自己紹介• 株式会社インターネットイニシアティブ(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 学園祭で発表予定)

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

内容1. httpbis interim( 中間会議) で議論した大

きめなトピックについて解説1. HTTP-draft-05/2.0 の話2. HPAC ( Header-Compression 改名)の話

2. HTTP/2.0 相互接続試験の話3. 今後の HTTP/2.0 仕様化のロードマップ

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

~ HTTP/2.0 の仕様作成作業 ~github を使ってます。

editorial fix → Pull Request OK, design issue -> issue 登録後、 ML に出す。github 上のコメントで議論が白熱 → ML に出せと怒られる

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

第3回 httpbis interim@ ハンブルグ

第87回 IETF Mtg@ ベルリンの翌週 8/5( 月 ) ~ 8/7( 水) Adobe@ ハンブルグで開催

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

httpbis interim アジェンダ• 1日目– Implementation Feedback– Issue 議論・整理

• 2日目– 相互接続試験

• 3日目(半日)– Issue 議論・整理– 次のロードマップ

draft-04 を元に各自が HTTP/2.0 の実装を持ち寄り、初めて接続試験を行った記念すべき会議

Page 7: httpbis interim とhttp2.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 という名称にしないと・・・httpbis で議論したらアカン。 TLS WG に行ってくれ。

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

大きめの議論トピックス(その2)CONTINUEフラグはアカン、使えん!

HEADERS +END_HEADERS flag

HEADERS +CONT flag

HEADERS +END_HEADERS

flag

HEADERS +CONT flag

ストリーム生成開

続きの2個目だ

よ1個目だ

よ終りだよ

draft-04 では、ストリーム生成開

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

大きめの議論のトピックス(その2)CONTINUATION フレームの新設

HEADERS CONTINUEATION+ END_HEADERS

CONTINUATION

続きの2個目だ

よ1個目だ

続きの終りだ

draft-05 では、

ストリーム生成

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

大きめの議論のトピックス(その3)

Server Push を完全に禁止したい

draft-04 では、

SETTINGSMAX_CONCURRENT_STREAMS: 0

PUSH_PROMISE

でも PUSH PROMISE は送れちゃうもんね。

1. 同時オープン0は仕様で PUSHを禁止させる?2. RSTする?3. 新たに PUSH 禁止設定を導入する?

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

大きめの議論のトピックス(その3)Server Push を完全に禁止したい

draft-05 では、2を採用

PUSH_PROMISE

RST_STREAM でみんな撃墜してやる!

RST_STREAM 迎撃

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

大きめの議論のトピックス(その4)Header-Compression-01 あかんじゃん!

working setfoo0, bar0, index0foo1, bar1, index1

Header Table (request)

0, :scheme, http1, :scheme,https2, :host,3, :path, /4, :method, GET5, accept,index0, foo0, bar0index1, foo1, bar1・・・36, via, 37, warning,

reference set

foo0,bar0foo1, bar1

name,value

index

デコード時 workng_set に問題が!

インデックスをなめる

ので O(N^2)の計算量が

でかいヘッダが送られて来たらメモリ枯渇し

ちゃう

eviction 時にインデック

スがずれちゃう

でかいリテラルヘッダ

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

大きめの議論のトピックス(その4)HPAC 誕生!

Header Table (request)

0, :scheme, http1, :scheme,https2, :host,3, :path, /4, :method, GET5, accept,index0, foo0, bar0index1, foo1, bar1index5, foo5,・・・36, via, 37, warning,38, foo5, bar5

reference set

foo0,bar0foo1, bar1

0 1 0 index5bar5 length

bar5 string

header set

foo5emitted

emit

Literal + Increment

working set を作らず、 emit による逐次処理に変更。メモリ制限も対応、ストリームとして扱うことも可能に。

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

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 を開発

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

世界初の HTTP/2.0 相互接続試験やりました

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

HTTP/2.0 接続成功!

iij-http2 <-> HTTP/2.0 Chrome

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

iij-http2 の相互接続試験結果

名称1 nghttp2 成功。バク発見していただきました。2 http2-katana Upgrade のバグ修正が完了せず。帰国後成功3 node-http2 成功。先方のバグ発見。修正済。4 Mozilla Firefox 成功。 closed state 仕様のバグ発見、仕様改訂済5 http2-perl 未試験(試験準備できなかった)6 iij-http2 N/A7 Akamai Ghost 成功。 Proxy対応へコードを改良が必要だった。8 Chromium 成功。 PING で不具合有。 Chrome 側が修正。9 Google Front End 未試験(間に合わなかったみたい)10 Twitter 未試験(間に合わなかったみたい)

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

この先のロードマップ• 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 前にバーチャル相互試験をやろう。