Upload
shigekiohtsu
View
1.420
Download
0
Tags:
Embed Size (px)
Citation preview
httpbis interim@シアトル レポート (第2回HTTP/2.0接続試験)
IIJ 大津 繁樹
2013年10月17日
HTTP2.0勉強会#2
第4回 httpbis interim@シアトル
もともと第88回 IETF Mtg@バンクーバー(11/3-8)の直前に予定され
ていたがハロウィン期間と重なるため3週間程前倒しで開催することに。 10/8(水) ~ 10/11(金) Micosoft Open Tech@ベルビュー (シアトルの隣市)で開催
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回中間会議(シアトル)
今ココ
interim アジェンダ
• 初日: 自己紹介、実装者フィードバック、テス
トフレームワーク構想の説明、相互接続試験(自由時間)
• 2日目: github issue の議論
• 3日目午前: issue 議論の続き
テストフレームワーク構想の説明
https://github.com/http2/wg_materials/blob/master/interim-13-10/test_principles.pdf
名称 実装言語 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 などの機能を一部実装していないのもあり
Node.jsのALPN対応
• Node.jsの9月上旬の master を fork。
• openssl の ALPNサポートは未リリース。
• git submodule で openssl の master を Node でリンクするよう改良。
• ALPN用の Node APIを追加。 • ALPNとNPNを両方サポート。
ただし両方同時に受け取った場合はNPNを広告しない。
twitter、なんと本番インフラでHTTP/2.0の試験始めてる!
draft06相互接続試験の様子
で、接続試験の開始
• 特に段取りを決めるわけでなくだらだらと…
• 実装当事者同士で直接やり取り。思いつくまま試験。
• 残りのメンバーは集まって仕様議論に夢中。
• Chrome 「手元にあるけど、まだ渡せないよ」と言われ… (翌日入手)
iij-http2 上のテストページ (もう helloworldだけじゃダメでしょ)
ほぼ,この試験で終わってしまった。
ちなみにHTTP/1.1でアクセスすると HTTP接続のみ。SSL接続は NPN, ALPN でHTTP/1.1接続を許してない
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して増加
いっぱいテストしました。 (バグ見つけ、見つけられ,まだ直ってないのも…)
nghttp2 からもテストしていただき数多くバグを見つけていただきました。 Thanx > @tatsuhiro_t
2日目の以降: 主な議論
• HTTP Upgrade を別仕様に分けるか?
–複雑だし、実装少ないし、テストもできてないし
– Alt-SVC,Alternate-Protocolを別ドラフトで作ってから再検討
• HPACK-03見直し
– Literal Rep. Substitute Indexing の削除
–初期ヘッダテーブルを静的に(evictionから解放)
– Request/Responesのテーブルを一つに統合
–頭(index:0)にインクリメントヘッダを導入
–ハフマン符号化の試験しよう
2日目の以降: 主な議論 cont’d
• SETTINGS Ack フラグの新設 –設定情報の同期(ヘッダテーブルサイズの変更)
– PINGいらなくない? とりあえず様子見。
• CONTINUATIONのEND_STREAM排除 – PUSH_PROMISEでのストリーム終了を回避
• :authority ヘッダの新設 – :hostの廃止。(HTTP/1.1と混同しやすいから)
• HPACKでヘッダ出現順が保存されないことを明記
• その他細かい修正色々
2日目の以降: 主な議論 cont’d
• ALPNに関して – 02がLast Call。バンクーバIETFが最後のチャンス – クライアントが送信できる拡張サイズに懸念
• Stream Dependency – Tokyo Interim から議論されている課題 – 木やグラフでPriorityの依存性を管理 – タブの切り替え、ビューポートの切り替え、順番維持が必要なビデオフレーム切り替え、に対して関連する複数のストリームを一気に repriority できる。
– まだまだ議論中。別ドラフトを作る予定。
• Frame Typeの拡張 – 独自試験する時とかどうする?
今後の流れ
• 全体的に仕様を収束化させる動き
• 新機能提案は却下もしくは別ドラフトへ
スケジュール
• ~10月下旬 仕様アップデート
• 11月上旬 IETFバンクーバで議論
• 2014年1月 5回目interim チューリッヒ@CISCO
• 2014年3月 IETF London前後で 6回目interim