Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

7,485 views

Published on

Published in: Technology
  • Be the first to comment

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 前にバーチャル相互試験をやろう。

×