http2.0 negotiation&header compression

27
ネゴシエーションの話 yuki

Upload: yuki-f

Post on 07-Jul-2015

5.746 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: http2.0 negotiation&header compression

ネゴシエーションの話

yuki

Page 2: http2.0 negotiation&header compression

自己紹介

・ゆき・社会人4月目

・最弱インフラエンジニア...orz・趣味  一応、プロトコルとかセキュリティとか  あと、ウクレレとか

あすのかぜってブログで、HTTP2.0界隈の記事をひっそり書いてます

Page 3: http2.0 negotiation&header compression

他の登壇者ガチ勢過ぎて恐ろしいです...

お手柔らかにorz

Page 4: http2.0 negotiation&header compression

HTTP2.0の機能

ざっくりと● アップグレードメカニズム(ネゴシエーション)● メッセージの多重化● フロー制御● 優先処理● ヘッダ圧縮● サーバプッシュ

Page 5: http2.0 negotiation&header compression

HTTP2.0の機能

ざっくりと

● アップグレードメカニズム(ネゴシエーション)● メッセージの多重化● フロー制御● 優先処理● ヘッダ圧縮● サーバプッシュ

Page 6: http2.0 negotiation&header compression

アップグレードメカニズム(ネゴシエーション)

● HTTP1.xはテキストで、HTTP2.0はバイナリでデータの送受信が行われる

● HTTP1.xとHTTP2.0ではセマンティクスは維持されるものの、データの形式が違う

● そのため、それぞれで通信することは出来無い

Page 7: http2.0 negotiation&header compression

それぞれで通信できない上、HTTP1.xもHTTP2.0も使用するポート番号は同じ...

→アップグレードメカニズム

アップグレードメカニズム(ネゴシエーション)

Page 8: http2.0 negotiation&header compression

3つの方法

仕様の「3 Starting HTTP/2.0」にHTTP2.0の開始方法が述べられている

1. HTTPの場合2. HTTPS(SSLを使用する)場合3. 事前にHTTP2.0に対応してることを知ってる場合

Page 9: http2.0 negotiation&header compression

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レスポンス

Page 10: http2.0 negotiation&header compression

HTTPSの場合

主に二つの方法が議論されている● TLS-NPN● TLS-ALPN

両方とも、TLSのハンドシェイク中に使用するプロトコルもネゴシエーションしてしまう仕組み。

Page 11: http2.0 negotiation&header compression

NPN

サーバから使用可能なプロトコルリストを送信する

Page 12: http2.0 negotiation&header compression

ハンドシェイク中なのでその様子を見たりも出来る

Page 13: http2.0 negotiation&header compression

ALPN

クライアントから使用可能なプロトコルリストを送信する

Page 14: http2.0 negotiation&header compression

NPNとALPN何が違うの

● 使用出来るプロトコルのリストをどちらが提示するか

● 選択できるプロトコルがリストになかった場合の処理が明確化されているか(ALPNは明確)

● Selected Protocolが暗号化されるか

Page 15: http2.0 negotiation&header compression

事前に知っている場合

実は、仕様上で詳しくは述べられていないDNSを使う方法が議論はされていたが...

SRVレコード、SVCINFOレコードというレコードに対応しているプロトコルを記述しておき、クライアントはサーバがHTTP2.0に対応しているか分かる

あと、SPDY2で使用されていたAlternate-Protocolヘッダを使用する場合も考えられる

Page 16: http2.0 negotiation&header compression

誤って通信を開始してしまった場合

誤って、HTTP2.0に対応してないホストにHTTP2.0で通信を開始してしまった場合...

HTTP1.xは改行をメッセージの終端として使用している。→終端を待ち続ける。コネクションを切断しようとしない

Page 17: http2.0 negotiation&header compression

コネクションヘッダ

コネクション(HTTP2.0の通信)を開始する際、コネクションヘッダとして以下の文字列を送信する

PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n

HTTP1.xのサーバであれば、改行文字が含まれているため、即座に向こうなメッセージとして切断される

Page 18: http2.0 negotiation&header compression

ヘッダ圧縮

超概略

Page 19: http2.0 negotiation&header compression

ヘッダ圧縮を行う理由

● HTTP1.xでは同じようなヘッダを毎回送る(例えばUserAgentやAcept系のヘッダ)

● HTTP1.xではテキスト形式でデータを送信している● SSLでの圧縮にCRIME攻撃という攻撃手法が見つかって

いる

Page 20: http2.0 negotiation&header compression

・ヘッダーテーブルを使って、一般的なヘッダ・一回使ったヘッダはindexを用いて表現する

・ヘッダはReference Setとして管理され、その差分情

報のみ送る

ヘッダ圧縮の仕組み

Page 21: http2.0 negotiation&header compression

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

Page 22: http2.0 negotiation&header compression

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.htmlindex=12,value=my-user-agentname=x-my-header,value=first

:path, /my-example/index.htmluser-agent, my-user-agentx-my-header, first

Reference Set

:path, /my-example/index.htmluser-agent, my-user-agentx-my-header, first

Reference Set

Page 23: http2.0 negotiation&header compression

話がかぶった時用

Page 24: http2.0 negotiation&header compression

個人的HTTP2.0の追い方

基本的な一次情報源は● GitHub

○ http2.0 spec,compression spec,material(minutes)■ commit■ issue■ wiki

● メーリングリスト○ HTTP1.1に関するものも流れてくる...

Page 25: http2.0 negotiation&header compression

個人的HTTP2.0の追い方

議論には、editionalなものとdesignのものがある。

気にしておくと追いやすい。あと、clarifyなどの単語も。

(英語弱いので、commitログを見てから、議論追ったり...orz)

Page 26: http2.0 negotiation&header compression

個人的HTTP2.0の追い方

二次情報源 本日登壇者の方々のツイッターやブログなど...

インターネットウォッチ [HTTP 2.0の最新動向]IETF86におけるHTTP/2.0関連トピックス

オライリーHigh Performance Browser Networking

Page 27: http2.0 negotiation&header compression

個人的HTTP2.0の追い方

あわせて眺めておきたい● 「SPDY Protocol - Draft 3」の日本語訳。● SPDYメーリングリスト● TLS WGメーリングリスト● 各種実装● 各種OSSのコミットログ

○ chromium,firefox...