Successfully reported this slideshow.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

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

  1. 1. httpbis interim と HTTP/2.0相互接続試験の話 HTTP/2.0 勉強会@IIJ 2013年8月14日 IIJ 大津 繁樹
  2. 2. 自己紹介 • 株式会社インターネットイニシアティブ(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学園祭で発表予定)
  3. 3. 内容 1. httpbis interim(中間会議) で議論した大 きめなトピックについて解説 1. HTTP-draft-05/2.0 の話 2. HPAC(Header-Compression改名)の話 2. HTTP/2.0相互接続試験の話 3. 今後のHTTP/2.0仕様化のロードマップ
  4. 4. ~ HTTP/2.0の仕様作成作業 ~ githubを使ってます。 editorial fix → Pull Request OK, design issue -> issue 登録後、 MLに出す。 github 上のコメントで議論が白熱 → MLに出せと怒られる
  5. 5. 第3回 httpbis interim@ハンブルグ 第87回 IETF Mtg@ベルリンの翌週 8/5(月) ~ 8/7(水) Adobe@ハンブルグで開催
  6. 6. httpbis interim アジェンダ • 1日目 – Implementation Feedback – Issue 議論・整理 • 2日目 – 相互接続試験 • 3日目(半日) – Issue 議論・整理 – 次のロードマップ draft-04を元に各自がHTTP/2.0 の実装を持ち寄 り、初めて接続試験を行った記念すべき会議
  7. 7. 大きめの議論トピックス(その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 という名称にしない と・・・
  8. 8. 大きめの議論トピックス(その2) CONTINUEフラグはアカン、使 えん! HEADERS + END_HEADERS flag HEADERS + CONT flag HEADERS + END_HEADERS flag HEADERS + CONT flag ストリー ム生成開 始 続きの 2個目だ よ 1個目だ よ 終りだよ draft-04 では、 ストリー ム生成開 始
  9. 9. 大きめの議論のトピックス(その2) CONTINUATIONフレームの新設 HEADERS CONTINUEATION + END_HEADERS CONTINUATION 続きの 2個目だ よ 1個目だ よ 続き の終りだ よ draft-05 では、 ストリー ム生成
  10. 10. 大きめの議論のトピックス(その3) Server Pushを完全に禁止したい draft-04 では、 SETTINGS MAX_CONCURRENT_STREAMS: 0 PUSH_PROMISE でもPUSH PROMISEは 送れちゃうもんね。 1. 同時オープン0は仕様で PUSHを禁止させる? 2. RSTする? 3. 新たにPUSH禁止設定を導入する?
  11. 11. 大きめの議論のトピックス(その3) Server Pushを完全に禁止したい draft-05 では、2を採用 PUSH_PROMISE RST_STREAMでみんな 撃墜してやる! RST_STREAM 迎撃
  12. 12. 大きめの議論のトピックス(その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時に インデック スがずれ ちゃう でかいリ テラル ヘッダ
  13. 13. 大きめの議論のトピックス(その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による逐次処理に変 更。メモリ制限も対応、ストリームとして扱う ことも可能に。
  14. 14. 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 を開発
  15. 15. 世界初のHTTP/2.0相互接続試験やりました
  16. 16. HTTP/2.0 接続成功! iij-http2 <-> HTTP/2.0 Chrome
  17. 17. 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 未試験(間に合わなかったみたい)
  18. 18. この先のロードマップ • 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 前にバーチャル相互試験をやろう。

×