SlideShare a Scribd company logo
1 of 27
Download to read offline
ネゴシエーションの話
yuki
自己紹介
・ゆき
・社会人4月目
・最弱インフラエンジニア...orz
・趣味
  一応、プロトコルとかセキュリティとか
  あと、ウクレレとか
あすのかぜってブログで、HTTP2.0界隈の記事を
ひっそり書いてます
他の登壇者
ガチ勢過ぎて恐ろしいです...
お手柔らかにorz
HTTP2.0の機能
ざっくりと
● アップグレードメカニズム(ネゴシエーション)
● メッセージの多重化
● フロー制御
● 優先処理
● ヘッダ圧縮
● サーバプッシュ
HTTP2.0の機能
ざっくりと
● アップグレードメカニズム(ネゴシエーション)
● メッセージの多重化
● フロー制御
● 優先処理
● ヘッダ圧縮
● サーバプッシュ
アップグレードメカニズム(ネゴシエーション)
● HTTP1.xはテキストで、HTTP2.0はバイナリでデータの送
受信が行われる
● HTTP1.xとHTTP2.0ではセマンティクスは維持されるもの
の、データの形式が違う
● そのため、それぞれで通信することは出来無い
それぞれで通信できない上、HTTP1.xもHTTP2.0
も使用するポート番号は同じ...
→アップグレードメカニズム
アップグレードメカニズム(ネゴシエーション)
3つの方法
仕様の「3 Starting HTTP/2.0」にHTTP2.0の開始
方法が述べられている
1. HTTPの場合
2. HTTPS(SSLを使用する)場合
3. 事前にHTTP2.0に対応してることを知ってる場合
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レスポンス
HTTPSの場合
主に二つの方法が議論されている
● TLS-NPN
● TLS-ALPN
両方とも、TLSのハンドシェイク中に使用するプロト
コルもネゴシエーションしてしまう仕組み。
NPN
サーバから使用可能なプロトコルリストを送信する
ハンドシェイク中なのでその様子を見たりも出来る
ALPN
クライアントから使用可能なプロトコルリストを送信
する
NPNとALPN何が違うの
● 使用出来るプロトコルのリストをどちらが提示す
るか
● 選択できるプロトコルがリストになかった場合の
処理が明確化されているか(ALPNは明確)
● Selected Protocolが暗号化されるか
事前に知っている場合
実は、仕様上で詳しくは述べられていない
DNSを使う方法が議論はされていたが...
SRVレコード、SVCINFOレコードというレコードに
対応しているプロトコルを記述しておき、クライアン
トはサーバがHTTP2.0に対応しているか分かる
あと、SPDY2で使用されていたAlternate-Protocol
ヘッダを使用する場合も考えられる
誤って通信を開始してしまった場合
誤って、HTTP2.0に対応してないホストにHTTP2.0で
通信を開始してしまった場合...
HTTP1.xは改行をメッセージの終端として使用してい
る。
→
終端を待ち続ける。コネクションを切断しようとしない
コネクションヘッダ
コネクション(HTTP2.0の通信)を開始する際、コネ
クションヘッダとして以下の文字列を送信する
PRI * HTTP/2.0rnrnSMrnrn
HTTP1.xのサーバであれば、改行文字が含まれ
ているため、即座に向こうなメッセージとして切断さ
れる
ヘッダ圧縮
超概略
ヘッダ圧縮を行う理由
● HTTP1.xでは同じようなヘッダを毎回送る
(例えばUserAgentやAcept系のヘッダ)
● HTTP1.xではテキスト形式でデータを送信している
● SSLでの圧縮にCRIME攻撃という攻撃手法が見つかって
いる
・ヘッダーテーブルを使って、一般的なヘッダ・一回
使ったヘッダはindexを用いて表現する
・ヘッダはReference Setとして管理され、その差分情
報のみ送る
ヘッダ圧縮の仕組み
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
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
話がかぶった時用
個人的HTTP2.0の追い方
基本的な一次情報源は
● GitHub
○ http2.0 spec,compression spec,material(minutes)
■ commit
■ issue
■ wiki
● メーリングリスト
○ HTTP1.1に関するものも流れてくる...
個人的HTTP2.0の追い方
議論には、editionalなものとdesignのものがある。
気にしておくと追いやすい。あと、clarifyなどの単
語も。
(英語弱いので、commitログを見てから、議論追っ
たり...orz)
個人的HTTP2.0の追い方
二次情報源
 本日登壇者の方々のツイッターやブログなど...
インターネットウォッチ [HTTP 2.0の最新動向]
IETF86におけるHTTP/2.0関連トピックス
オライリー
High Performance Browser Networking
個人的HTTP2.0の追い方
あわせて眺めておきたい
● 「SPDY Protocol - Draft 3」の日本語訳。
● SPDYメーリングリスト
● TLS WGメーリングリスト
● 各種実装
● 各種OSSのコミットログ
○ chromium,firefox...

More Related Content

What's hot

Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタBeam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタKenichi Kambara
 
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!treby
 
Web packaging IETF 側
Web packaging IETF 側Web packaging IETF 側
Web packaging IETF 側yuki-f
 
NNTPについて簡単すぎる説明
NNTPについて簡単すぎる説明NNTPについて簡単すぎる説明
NNTPについて簡単すぎる説明Yuki Ito
 
低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察Takaaki Hoyo
 
Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様yuki-f
 

What's hot (7)

Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタBeam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタ
 
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!
 
Web packaging IETF 側
Web packaging IETF 側Web packaging IETF 側
Web packaging IETF 側
 
NNTPについて簡単すぎる説明
NNTPについて簡単すぎる説明NNTPについて簡単すぎる説明
NNTPについて簡単すぎる説明
 
低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察
 
PHP+DB
PHP+DBPHP+DB
PHP+DB
 
Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様
 

http2.0 negotiation&header compression