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.

http2.0 negotiation&header compression

6,845 views

Published on

Published in: Technology
  • Be the first to comment

http2.0 negotiation&header compression

  1. 1. ネゴシエーションの話 yuki
  2. 2. 自己紹介 ・ゆき ・社会人4月目 ・最弱インフラエンジニア...orz ・趣味   一応、プロトコルとかセキュリティとか   あと、ウクレレとか あすのかぜってブログで、HTTP2.0界隈の記事を ひっそり書いてます
  3. 3. 他の登壇者 ガチ勢過ぎて恐ろしいです... お手柔らかにorz
  4. 4. HTTP2.0の機能 ざっくりと ● アップグレードメカニズム(ネゴシエーション) ● メッセージの多重化 ● フロー制御 ● 優先処理 ● ヘッダ圧縮 ● サーバプッシュ
  5. 5. HTTP2.0の機能 ざっくりと ● アップグレードメカニズム(ネゴシエーション) ● メッセージの多重化 ● フロー制御 ● 優先処理 ● ヘッダ圧縮 ● サーバプッシュ
  6. 6. アップグレードメカニズム(ネゴシエーション) ● HTTP1.xはテキストで、HTTP2.0はバイナリでデータの送 受信が行われる ● HTTP1.xとHTTP2.0ではセマンティクスは維持されるもの の、データの形式が違う ● そのため、それぞれで通信することは出来無い
  7. 7. それぞれで通信できない上、HTTP1.xもHTTP2.0 も使用するポート番号は同じ... →アップグレードメカニズム アップグレードメカニズム(ネゴシエーション)
  8. 8. 3つの方法 仕様の「3 Starting HTTP/2.0」にHTTP2.0の開始 方法が述べられている 1. HTTPの場合 2. HTTPS(SSLを使用する)場合 3. 事前にHTTP2.0に対応してることを知ってる場合
  9. 9. HTTPの場合 HTTP1.xで通信を開始して、Upgradeヘッダを用 いてHTTP2.0に切り替える GET /default.htm HTTP/1.1 Host: server.example.com Connection: Upgrade, HTTP2-Settings Upgrade: HTTP/2.0 HTTP2-Settings: <base64url encoding of HTTP/2.0 SETTINGS payload> HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: HTTP/2.0 [ HTTP/2.0 connection ... HTTPリクエスト HTTPレスポンス
  10. 10. HTTPSの場合 主に二つの方法が議論されている ● TLS-NPN ● TLS-ALPN 両方とも、TLSのハンドシェイク中に使用するプロト コルもネゴシエーションしてしまう仕組み。
  11. 11. NPN サーバから使用可能なプロトコルリストを送信する
  12. 12. ハンドシェイク中なのでその様子を見たりも出来る
  13. 13. ALPN クライアントから使用可能なプロトコルリストを送信 する
  14. 14. NPNとALPN何が違うの ● 使用出来るプロトコルのリストをどちらが提示す るか ● 選択できるプロトコルがリストになかった場合の 処理が明確化されているか(ALPNは明確) ● Selected Protocolが暗号化されるか
  15. 15. 事前に知っている場合 実は、仕様上で詳しくは述べられていない DNSを使う方法が議論はされていたが... SRVレコード、SVCINFOレコードというレコードに 対応しているプロトコルを記述しておき、クライアン トはサーバがHTTP2.0に対応しているか分かる あと、SPDY2で使用されていたAlternate-Protocol ヘッダを使用する場合も考えられる
  16. 16. 誤って通信を開始してしまった場合 誤って、HTTP2.0に対応してないホストにHTTP2.0で 通信を開始してしまった場合... HTTP1.xは改行をメッセージの終端として使用してい る。 → 終端を待ち続ける。コネクションを切断しようとしない
  17. 17. コネクションヘッダ コネクション(HTTP2.0の通信)を開始する際、コネ クションヘッダとして以下の文字列を送信する PRI * HTTP/2.0rnrnSMrnrn HTTP1.xのサーバであれば、改行文字が含まれ ているため、即座に向こうなメッセージとして切断さ れる
  18. 18. ヘッダ圧縮 超概略
  19. 19. ヘッダ圧縮を行う理由 ● HTTP1.xでは同じようなヘッダを毎回送る (例えばUserAgentやAcept系のヘッダ) ● HTTP1.xではテキスト形式でデータを送信している ● SSLでの圧縮にCRIME攻撃という攻撃手法が見つかって いる
  20. 20. ・ヘッダーテーブルを使って、一般的なヘッダ・一回 使ったヘッダはindexを用いて表現する ・ヘッダはReference Setとして管理され、その差分情 報のみ送る ヘッダ圧縮の仕組み
  21. 21. header table index header value 0 :scheme http 1 :scheme https 2 :host 3 :path / 4 :method GET 5 accept 6 accept-charset … 36 via 37 warning index header 200 0 :status 1 age 2 cache-control 3 content-length 4 content-type 5 date 6 etag … 33 warning 34 www-authenticate request header table response header table
  22. 22. index header value 0 :scheme http 1 :scheme https … 36 via 37 warning index header value 0 :scheme http 1 :scheme https … 36 via 37 warning header table header table index=3,value=/my-example/index.html index=12,value=my-user-agent name=x-my-header,value=first :path, /my-example/index.html user-agent, my-user-agent x-my-header, first Reference Set :path, /my-example/index.html user-agent, my-user-agent x-my-header, first Reference Set
  23. 23. 話がかぶった時用
  24. 24. 個人的HTTP2.0の追い方 基本的な一次情報源は ● GitHub ○ http2.0 spec,compression spec,material(minutes) ■ commit ■ issue ■ wiki ● メーリングリスト ○ HTTP1.1に関するものも流れてくる...
  25. 25. 個人的HTTP2.0の追い方 議論には、editionalなものとdesignのものがある。 気にしておくと追いやすい。あと、clarifyなどの単 語も。 (英語弱いので、commitログを見てから、議論追っ たり...orz)
  26. 26. 個人的HTTP2.0の追い方 二次情報源  本日登壇者の方々のツイッターやブログなど... インターネットウォッチ [HTTP 2.0の最新動向] IETF86におけるHTTP/2.0関連トピックス オライリー High Performance Browser Networking
  27. 27. 個人的HTTP2.0の追い方 あわせて眺めておきたい ● 「SPDY Protocol - Draft 3」の日本語訳。 ● SPDYメーリングリスト ● TLS WGメーリングリスト ● 各種実装 ● 各種OSSのコミットログ ○ chromium,firefox...

×