30
「安心・安全・安定・信頼」できるインターネットサービスを 株式会社クルウィット 井澤 志充 最新プロトコル HTTP/2 とは 2015/05/16 (Sat) Kanazawa.rb #33 @ITBP武蔵

最新プロトコル HTT/2 とは

Embed Size (px)

Citation preview

Page 1: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

株式会社クルウィット 井澤 志充

最新プロトコル HTTP/2 とは

2015/05/16 (Sat) Kanazawa.rb #33 @ITBP武蔵

Page 2: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

じこしょうかい

• (株)クルウィットの取締役 兼 北陸支社長• 博士(情報科学)• ネットワーク関連の委託研究・自社サービス開発など

2

• 井澤 志充 (いざわゆきみつ)

@Yukimitsu_Izawa

Page 3: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

Page 4: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

Page 5: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

10月5日 リーナス・トーバルズがLinuxカーネルをリリース

Page 6: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

10月5日 リーナス・トーバルズがLinuxカーネルをリリース4月1日 東京ビッグサイト(東京国際展示場)が開場 6月23日 任天堂がNINTENDO64が発売開始

Page 7: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

10月5日 リーナス・トーバルズがLinuxカーネルをリリース4月1日 東京ビッグサイト(東京国際展示場)が開場 6月23日 任天堂がNINTENDO64が発売開始

7月10日 テレビ東京、人気バラエティ番組『出動!ミニスカポリス』放送開始

Page 8: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

10月5日 リーナス・トーバルズがLinuxカーネルをリリース4月1日 東京ビッグサイト(東京国際展示場)が開場 6月23日 任天堂がNINTENDO64が発売開始

7月10日 テレビ東京、人気バラエティ番組『出動!ミニスカポリス』放送開始4月1日 ポケットモンスター (アニメ)

が放送開始

Page 9: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

10月5日 リーナス・トーバルズがLinuxカーネルをリリース4月1日 東京ビッグサイト(東京国際展示場)が開場 6月23日 任天堂がNINTENDO64が発売開始

7月10日 テレビ東京、人気バラエティ番組『出動!ミニスカポリス』放送開始4月1日 ポケットモンスター (アニメ)

が放送開始12月16日 ポケモンショック

Page 10: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

10月5日 リーナス・トーバルズがLinuxカーネルをリリース4月1日 東京ビッグサイト(東京国際展示場)が開場 6月23日 任天堂がNINTENDO64が発売開始

7月10日 テレビ東京、人気バラエティ番組『出動!ミニスカポリス』放送開始4月1日 ポケットモンスター (アニメ)

が放送開始12月16日 ポケモンショック7月26日 Bluetooth仕様書バージョン1.0発表

Page 11: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTPの歴史

1991 HTTP/0.91996/5 HTTP/1.0 RFC19451997/1 HTTP/1.1 RFC20681999/6 HTTP/1.1 RFC26162012/11 SPDYを元にHTTP/2策定開始

8月6日 ティム・バーナーズ=リーによって世界初のWorld Wide Webサイトが開設

10月5日 リーナス・トーバルズがLinuxカーネルをリリース4月1日 東京ビッグサイト(東京国際展示場)が開場 6月23日 任天堂がNINTENDO64が発売開始

7月10日 テレビ東京、人気バラエティ番組『出動!ミニスカポリス』放送開始4月1日 ポケットモンスター (アニメ)

が放送開始12月16日 ポケモンショック7月26日 Bluetooth仕様書バージョン1.0発表 12月31日 聖飢魔II、解散

Page 12: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/1.1の抱える問題点

• 昨今のデータ転送量に追いつかなくなってきた• ひとつのTCP上のHTTPはシーケンシャルに処理される

• pipeliningして「A,B,Cをちょうだい」といってもBがつまるとCは来ない。

• Head of Line Blocking• ブラウザの最大接続数の上限が4~6本程度

4

Page 13: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

SPDY

• Googleがデータ転送の効率化を目的として開発した転送プロトコル

• 一本のTCPを効率よく運用する• 設計上、レイテンシの大きい状況では不利

5

Page 14: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2の現状

昨日(2015/05/15)、HTTP/2 が正式にRFCになりました

RFC7540 - Hypertext Transfer Protocol Version 2(HTTP/2)RFC7541 - HPACK: Header Compression for HTTP/2

6

Page 15: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2の目的

• 計算機フレンドリなメッセージ構造• 一つの接続に複数の通信をする仕組み• ヘッダを効率良く符号化・圧縮する仕組み

7

Page 16: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2 Frame

レイヤ構造

8

TCP

TLS

IPv4/v6

HTTP/1.1 semantics

Page 17: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2の特徴• トランザクションセマンティクスの完全後方互換• 接続の多重化• ストリームによるパイプライン化• バイナリフレーム• ヘッダの圧縮• サーバープッシュ• ストリームの優先度• https://~ ALPN• http://~ HTTP Upgrade

9

Page 18: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

ストリームによるパイプライン化

10

HTTP/2接続(基本的に1つ)

ストリーム

リクエスト

レスポンス

ストリーム

ストリーム

クライアント サーバ

フレーム

フレーム

フレーム

フレーム

Page 19: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

バイナリフレーム

11

• クライアントとサーバのやりとりはすべてバイナリフレームという単位でやりとりされる

DATA … リクエスト、レスポンスのボディを転送する HEADERS … 圧縮済みのHTTPヘッダを転送する PRIORITY … ストリームの優先度変更通知 PUSH_PROMISE … サーバからのプッシュ通知 WINDOW_UPDATE … フロー制御用ウィンドウの変更

などなど。

Page 20: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

ヘッダの圧縮 (HPACK)

12

• そもそもヘッダが固定長バイナリになった• よく使われるヘッダにインデックスが付与されている

• 1とか2とか• インデックス番号を使ってリクエストのデータ量を削減• さらに2回目以降は、直前との差分情報だけを送信

Page 21: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

サーバプッシュ

13

リクエスト

レスポンス

クライアント サーバ

レスポンス

レスポンス

index.html ください

main.cssが必要だから送っておくね

logo.pngも必要だから送っておくね

index.htmlを送ります

Page 22: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

ALPN (Application Layer Protocol Negotiation)

14

• SSLの拡張のひとつ• ハンドシェイクの段階でどのアプリケーションプロトコルを使うかを決定する

• SSL通信の際に、クライアントからアプリケーションプロトコルとしてHTTP/2を提案するかたち

Page 23: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP Upgrade

15

• クライアントがHTTP/1.1のヘッダに加え、• Upgrade: h2c• HTTP2-Settiings: xxxx

• を送信し、サーバ側がHTTP/2対応であれば以降HTTP/2で。

• そうでなければ単純に無視されてHTTP/1.1で通信を継続する。

Page 24: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2への対応状況(ブラウザ)

16

• Firefox 35 or later• Chrome 41 or later• IE11 on Win10 Technical Preview

Page 25: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2への対応状況

17

※ 図はcaniuse.comより

Page 26: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2への対応状況(サーバ)

18

• Apache - mod_h2• https://icing.github.io/mod_h2/

• nginx

• nghttp2• https://github.com/tatsuhiro-t/nghttp2

• Etc.

“ We're pleased to announce that we plan to release versions of both NGINX and NGINX Plus by the end of 2015 that will include support for HTTP/2. ”

Page 27: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

HTTP/2への対応状況(言語)

19

• Ruby - http-2 gem (server/client)• https://github.com/igrigorik/http-2

• mruby - Trusterd (server)• https://github.com/trusterd/trusterd

• Go - http2 (server/client)• https://github.com/bradfitz/http2

• Python - hyper (client)• https://github.com/lukasa/hyper

• NodeJS - (Server)• https://github.com/summerwind/sasazka

出典:https://github.com/http2/http2-spec/wiki/Implementations

Page 28: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

まとめ• HTTP/2に至る歴史をおさらい• HTTP/1.1までの課題を確認• HTTP/2の特徴をまとめた• HTTP/2に対応しているソフトウェアの現状を確認した

20

Page 29: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

References• 「RFC7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)」• http://www.rfc-editor.org/rfc/rfc7540.txt

• 「RFC7541 - HPACK: Header Compression for HTTP/2」• http://www.rfc-editor.org/rfc/rfc7541.txt

• 「HTTP2のヘッダ圧縮 Huffman Encode の原理とメリット・デメリット」• http://qiita.com/iwanaga/items/98f60003c0114e04095e

• 「HTTP/2の現状とこれから」• http://www.slideshare.net/shigeki_ohtsu/http2-ohtsu-html5conf2015

• 「HTTP/2入門」• http://www.slideshare.net/techblogyahoo/http2-35029629

• 「HTTP/2をちょっと触ってみた」• http://blog.applest.net/article/20141210-http2-ataglance/

• 「高速・大規模ネットワーク時代に向けて改良されたHTTP/2プロトコル」• http://www.atmarkit.co.jp/ait/articles/1409/18/news135.html

21

Page 30: 最新プロトコル HTT/2 とは

「安心・安全・安定・信頼」できるインターネットサービスを

• Thank You!• If you have any comments,

• please send to:• Mail: [email protected] / [email protected]• Twitter: @Yukimitsu_Izawa

22