HTTP/2.0と標準化
2013/10/28(Mon)
パワーランチ@NEXTSCAPE
Taketo Takashima
agenda
• はじめに
- HTTPとHTML
- 標準化(IETF)

• Webの変化
• HTTP/2.0
• SPDY
• まとめ
HTTPとHTML
HTTP
HTML
HTTPとは?

• Hyper Text Transfer Protocol
• サーバとブラウザ間でHTMLをやり取
りするルール

• ユーザトラフィックの約80%がHTTP
HTTPの歴史
1991

WWW公開

1996/5 HTTP/1.0 (RFC1945)
1997/7 HTTP/1.1 (RFC2068)
...
2009/11 SPDY/1 (Google)
2012/8 HTTP/2.0 (IETF 84)
2012/11 HTTP/2.0 (draft-00)
2013/10 HTTP/2.0 (draft-07)
HTTPのリクエスト

http://t32k.me/mol/log/reduce-http-requests-overview/
標準化(IETF)
標準?

• 相互運用のための規格のこと
- 単位(メートル)、ネジ、電話、WiFi、
- メール、HTTP、HTML、etc...

• 国際標準: 世界共通の規格
標準化団体

• IETF: インターネット技術
• W3C: Web/HTML
• ITU: 電気通信/無線通信
• ISO: 工業(電気分野以外)
IETFとは?
•

インターネット技術の標準化団体
- MLやMeeting(年3回)で議論
- だれでも参加可能

•

RFCを発行
- IPv4/v6やTCP, HTTP, FTP, メールなどの仕様

•

Working Group
- hybi、json、dnsop、ospf、oauth など
標準化の流れ(IETF)

• Internet-Draft として十分議論される
とRFC化に進む

https://www.nic.ad.jp/ja/newsletter/No24/090.html
Webの変化
HTTPの歴史
1991

WWW公開

1996/5 HTTP/1.0 (RFC1945)
1997/7 HTTP/1.1 (RFC2068)
...
2009/11 SPDY/1
2012/8 HTTP/2.0 (IETF 84)
2012/11 HTTP/2.0 (draft-00)
2013/10 HTTP/2.0 (draft-07)
1997

2013
ページサイズとリクエスト数の推移

http://httparchive.org/trends.php#bytesTotal&reqTotal
HTTP/1.1の問題点

• ネットワークの効率が悪い
- パイプライン/keep-alive

• 認証(Basic, Digest)
• セキュリティ
• etc...
HTTP/2.0
HTTP/2.0の目的

• 環境を限定しないパフォーマンス改善
• ネットワーク資源の効率的な使用
• 現代的なセキュリティ要件および慣習
の反映
仕様策定状況

• IETF httpbis WG で仕様策定中
• 2014年11月標準化(RFC)を目標
• 現在の状況: Internet-Draft
draft-ietf-httpbis-http2-07
HTTPの歴史
1991

WWW公開

1996/5 HTTP/1.0 (RFC1945)
1997/7 HTTP/1.1 (RFC2068)
...
2009/11 SPDY/1(Google)
2012/8 HTTP/2.0 (IETF 84)
2012/11 HTTP/2.0 (draft-00)
2013/10 HTTP/2.0 (draft-07)
SPDY/3をベースに仕様策定中

http://tools.ietf.org/html/draft-ietf-httpbis-http2-00
HTTP/2.0の機能
HTTP/2.0で変わらないこと

•
•

メソッド(GET/POST)、ステータスコード(404)
URIのスキーム(http://)
- http2://、web://

•

TCPの利用
- UDP、TFO(TCP Fast Open)なども検討された

•

認証はスコープから除外
- IETF httpauth WG で議論中
HTTP/2.0で追加される機能

• バイナリ形式
• 多重化/フロー制御
• ヘッダ圧縮(HPAC)
• サーバプッシュ
• アップグレード(ALPN)
バイナリ形式

• バイナリ形式の「フレーム」単位

http://chimera.labs.oreilly.com/books/1230000000545/ch12.html#_design_and_technical_goals
フレームの種類
• DATA
• HEADERS
• PRIORITY
• RST_STREAM
• SETTINGS

• PUSH_PROMISE
• PING
• GOAWAY
• WINDOW_UPDATE
• CONTINUATION
多重化/フロー制御
• HTTP/1.1 - 1コネクション(TCP)で1リクエ
スト(HTTP)

• HTTP/2.0 - TCPコネクション内に複数チャ
ネル作成

• レスポンスはリクエストの順序に依存しない

http://chimera.labs.oreilly.com/books/1230000000545/ch12.html#_design_and_technical_goals
https://jxck.io/labs/http2cat/#https://www.facebook.com/
ヘッダ圧縮(HPAC)

• ヘッダの差分のみ送信

http://chimera.labs.oreilly.com/books/1230000000545/ch12.html#_design_and_technical_goals
サーバプッシュ
• 関連するリソースをクライアントからリクエ
ストがある前にサーバから送信する

http://chimera.labs.oreilly.com/books/1230000000545/ch12.html#_design_and_technical_goals
アップグレード(ALPN)

• HTTP/1.1とHTTP/2.0の相互接続
• TLS必須ではない
で、何が変わるの?
• Webの高速化手法
- CSSスプライト不要?
- Domain Sharding で遅くなる?

• ネットワークデザイン
- ロードバランサーの外側はHTTP/2.0
- ロードバランサーの内側はHTTP/1.1
HTTP/2.0 Gateway?

http://www.f5networks.co.jp/shared/pdf/BIG-IP_SPDY_Gateway.pdf
いつ使えるようになる?
HTTP/2.0の実装(2013/10)
•
•
•
•
•
•
•
•
•
•
•
•

nghttp2; C; client + server + intermediary; NPN + Upgrade + direct; draft-06
http2-katana; C#; server + test client; ALPN + Upgrade; draft-06
node-http2; JavaScript (NodeJS); server + client; NPN + direct; draft-06
Mozilla; C++; client; ALPN + NPN; draft-06
http2-perl; Perl; client + server; NPN; draft-04
iij-http2; NodeJS; client + server; ALPN + NPN + Upgrade + direct; draft-06
Akamai Ghost; C++; intermediary; NPN; draft-06
Chromium; C++; client; ALPN + NPN; draft-06
Hasan's GFE; C++; intermediary; ALPN + NPN; draft-04
Twitter; Java; server + client; NPN; draft-06
Wireshark; C; other; NPN + ALPN; draft-06
Ericsson MSP; proxy; NPN + Upgrade + direct; draft-06

https://github.com/http2/http2-spec/wiki/Implementations
まだ使えません!

• サーバのプロトタイプ実装/相互接続試
験が始まったばかり

• 早く試してみたい人は SPDY を使いま
しょう!
SPDY
SPDYとは?

• Googleが策定した Web の表示を高速
化するためのプロトコル

• 多重化/ヘッダ圧縮/サーバプッシュ/
etc

http://www.chromium.org/spdy/spdy-whitepaper
SPDY バージョン

http://www.chromium.org/spdy/spdy-protocol
SPDY 対応状況
ブラウザ

サーバ

• Chrome 10+
• Firefox 13+
• IE 11
• Opera 12+
• Android 3.0+

• Apache(mod_spdy)
• Nginx
• Jetty
• Python
• Ruby
• node.js
• F5 BIG-IP
SPDYを利用しているサービス

• Google
• Akamai
• facebook
• twitter
• Line
• wordpress.com
ヘッダ圧縮+TLSの脆弱性

• CRIME攻撃
- 重複したデータが圧縮されるので、文字列を
埋め込んで送信データが小さくなれば文字列
を推測できる

• 対策
- SPDY/3までの実装ではヘッダ圧縮OFFにす
る
まとめ
まとめ

• HTTP/2.0はパフォーマンスの改善
• Web高速化の手法が変わる
• 今すぐ試すなら SPDY を利用する
• 標準化の仕様を知ると、今後の技術動
向の未来が少しわかる(...かも)
参考情報
HTTP/2.0関連(仕様)
•

draft

http://tools.ietf.org/html/draft-ietf-httpbis-http2

•

github

https://github.com/http2/http2-spec

•

httpbis

http://trac.tools.ietf.org/wg/httpbis/trac/wiki

•

SPDY

http://www.chromium.org/spdy/
HTTP/2.0紹介記事
•

HTTP 2.0の最新動向 ¦ Internet Watch

http://internet.watch.impress.co.jp/docs/
column/http20/latest.html

•

Web表示の高速化を実現するSPDYとHTTP/2.0の
標準化

http://www.iij.ad.jp/company/development/
tech/activities/spdy/

•

変わるWebプロトコルの常識(SPDY, HTTP2.0
編) ¦ html5experts.jp

http://html5experts.jp/komasshu/404/
IETF関連
•

IETF

http://www.ietf.org/

•

The Tao of IETF

http://www.ietf.org/tao-translated-ja.html

•

IETFとRFC - JPNIC

https://www.nic.ad.jp/ja/tech/rfc-jp.html

•

インターネット10分講座:RFC - JPNIC

https://www.nic.ad.jp/ja/newsletter/
No24/090.html

HTTP/2.0と標準化