18
httpbis interim@シアトル レポート (2HTTP/2.0接続試験) IIJ 大津 繁樹 20131017HTTP2.0勉強会#2

httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

Embed Size (px)

Citation preview

Page 1: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

httpbis interim@シアトル レポート (第2回HTTP/2.0接続試験)

IIJ 大津 繁樹

2013年10月17日

HTTP2.0勉強会#2

Page 2: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

第4回 httpbis interim@シアトル

もともと第88回 IETF Mtg@バンクーバー(11/3-8)の直前に予定され

ていたがハロウィン期間と重なるため3週間程前倒しで開催することに。 10/8(水) ~ 10/11(金) Micosoft Open Tech@ベルビュー (シアトルの隣市)で開催

Page 3: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

HTTP/2.0仕様化 これまでの歩み 年 月 トピック

2012年1月 IETF httpbis WGでHTTP/2.0の仕様検討開始することを決定

2012年11月 3つの候補案からSPDY仕様をベースにすることを決定 draft-00(SPDY/3仕様をそのまま)リリース

2013年1月 第1回中間会議(東京) draft-01リリース(HTTPからのUpgrade方法を追加)

2013年4月 draft-02リリース(フレームフォーマット・タイプの大幅な変更)

2013年5月 draft-03リリース(中間会議に向けて修正点の整理・まとめ)

2013年6月 第2回中間会議(サンフランシスコ) 2候補案を合わせたヘッダ圧縮仕様の採用を決定

2013年7月 draft-04リリース(最初の実装仕様)

2013年8月 第3回中間会議(ハンブルグ) 最初のHTTP/2.0相互接続試験を実施 draft-05リリース(接続試験結果を反映) draft-06, HPACK(header-compression-02)リリース(実装仕様)

2013年10月 第4回中間会議(シアトル)

今ココ

Page 4: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

interim アジェンダ

• 初日: 自己紹介、実装者フィードバック、テス

トフレームワーク構想の説明、相互接続試験(自由時間)

• 2日目: github issue の議論

• 3日目午前: issue 議論の続き

Page 5: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

テストフレームワーク構想の説明

https://github.com/http2/wg_materials/blob/master/interim-13-10/test_principles.pdf

Page 6: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

名称 実装言語 Client,Server, Intermidate

ニゴシエーション

1 nghttp2 C S, C, I NPN, Upgrade, Direct

2 http2-katana C# S, C ALPN, Upgrade

3 node-http2 Node.js S, C NPN, direct

4 Mozilla Firefox C++ C ALPN, NPN

5 iij-http2 Node.js S, C ALPN, NPN, Upgrade, Direct

6 Akamai Ghost C++ I NPN

7 Chromium C++ C ALPN, NPN

8 Twitter Java S, C NPN

9 Wireshark C other NPN, ALPN

10 Ericcson MSP C proxy nghttp2 + patch

( https://github.com/http2/http2-spec/wiki/Implementations より引用)

HTTP-draft-06/2.0 対応相互接続試験実装リスト

New

New

New

いくつか CONTINUATION や Server Push などの機能を一部実装していないのもあり

Page 7: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

Node.jsのALPN対応

• Node.jsの9月上旬の master を fork。

• openssl の ALPNサポートは未リリース。

• git submodule で openssl の master を Node でリンクするよう改良。

• ALPN用の Node APIを追加。 • ALPNとNPNを両方サポート。

ただし両方同時に受け取った場合はNPNを広告しない。

Page 8: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

twitter、なんと本番インフラでHTTP/2.0の試験始めてる!

Page 9: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

draft06相互接続試験の様子

Page 10: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

で、接続試験の開始

• 特に段取りを決めるわけでなくだらだらと…

• 実装当事者同士で直接やり取り。思いつくまま試験。

• 残りのメンバーは集まって仕様議論に夢中。

• Chrome 「手元にあるけど、まだ渡せないよ」と言われ… (翌日入手)

Page 11: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

iij-http2 上のテストページ (もう helloworldだけじゃダメでしょ)

ほぼ,この試験で終わってしまった。

Page 12: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

ちなみにHTTP/1.1でアクセスすると HTTP接続のみ。SSL接続は NPN, ALPN でHTTP/1.1接続を許してない

Page 13: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

Ajaxを使ったHPACK-03、CONTINUATION テスト

リクエストヘッダをJSONで返すページを作成

var req = new XMLHttpRequest(); var name = 'myheader' + i ; ajaxheader[name] = (new Array(12)).join(Math.random().toString(36).slice(-8)); req.open('GET', "/printenv" + i, false); req.setRequestHeader(name, ajaxheader[name]);

Ajaxでリクエストヘッダを追加、JSONのデータと比較、チェック → 追加ヘッダの name, value をiterationして増加

Page 14: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

いっぱいテストしました。 (バグ見つけ、見つけられ,まだ直ってないのも…)

nghttp2 からもテストしていただき数多くバグを見つけていただきました。 Thanx > @tatsuhiro_t

Page 15: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

2日目の以降: 主な議論

• HTTP Upgrade を別仕様に分けるか?

–複雑だし、実装少ないし、テストもできてないし

– Alt-SVC,Alternate-Protocolを別ドラフトで作ってから再検討

• HPACK-03見直し

– Literal Rep. Substitute Indexing の削除

–初期ヘッダテーブルを静的に(evictionから解放)

– Request/Responesのテーブルを一つに統合

–頭(index:0)にインクリメントヘッダを導入

–ハフマン符号化の試験しよう

Page 16: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

2日目の以降: 主な議論 cont’d

• SETTINGS Ack フラグの新設 –設定情報の同期(ヘッダテーブルサイズの変更)

– PINGいらなくない? とりあえず様子見。

• CONTINUATIONのEND_STREAM排除 – PUSH_PROMISEでのストリーム終了を回避

• :authority ヘッダの新設 – :hostの廃止。(HTTP/1.1と混同しやすいから)

• HPACKでヘッダ出現順が保存されないことを明記

• その他細かい修正色々

Page 17: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

2日目の以降: 主な議論 cont’d

• ALPNに関して – 02がLast Call。バンクーバIETFが最後のチャンス – クライアントが送信できる拡張サイズに懸念

• Stream Dependency – Tokyo Interim から議論されている課題 – 木やグラフでPriorityの依存性を管理 – タブの切り替え、ビューポートの切り替え、順番維持が必要なビデオフレーム切り替え、に対して関連する複数のストリームを一気に repriority できる。

– まだまだ議論中。別ドラフトを作る予定。

• Frame Typeの拡張 – 独自試験する時とかどうする?

Page 18: httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)

今後の流れ

• 全体的に仕様を収束化させる動き

• 新機能提案は却下もしくは別ドラフトへ

スケジュール

• ~10月下旬 仕様アップデート

• 11月上旬 IETFバンクーバで議論

• 2014年1月 5回目interim チューリッヒ@CISCO

• 2014年3月 IETF London前後で 6回目interim