SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
HTTP/2 入門
Report
Yahoo!デベロッパーネットワーク
Follow
Public Relations
May. 22, 2014
•
0 likes
•
63,580 views
1
of
33
HTTP/2 入門
May. 22, 2014
•
0 likes
•
63,580 views
Download Now
Download to read offline
Report
Technology
Yahoo!デベロッパーネットワーク
Follow
Public Relations
Recommended
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
49.8K views
•
139 slides
Dockerからcontainerdへの移行
Kohei Tokunaga
16.2K views
•
36 slides
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
32K views
•
42 slides
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
11K views
•
63 slides
ロードバランスへの長い道
Jun Kato
13.5K views
•
20 slides
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
42K views
•
27 slides
More Related Content
What's hot
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
3.4K views
•
31 slides
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
techgamecollege
902 views
•
121 slides
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
40K views
•
42 slides
目grep入門 +解説
murachue
88.6K views
•
83 slides
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
23.1K views
•
25 slides
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
36.8K views
•
53 slides
What's hot
(20)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
•
3.4K views
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
techgamecollege
•
902 views
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
•
40K views
目grep入門 +解説
murachue
•
88.6K views
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
•
23.1K views
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
•
36.8K views
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
•
24.1K views
Linux女子部 systemd徹底入門
Etsuji Nakai
•
137.1K views
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
•
2.5K views
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
•
6.1K views
MQTTとAMQPと.NET
terurou
•
39.7K views
DockerとPodmanの比較
Akihiro Suda
•
45.8K views
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
•
97.8K views
CDNの仕組み(JANOG36)
J-Stream Inc.
•
19.5K views
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
Google Cloud Platform - Japan
•
32.7K views
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
•
23.2K views
Serverless時代のJavaについて
Amazon Web Services Japan
•
12.8K views
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
•
9.3K views
本当は恐ろしい分散システムの話
Kumazaki Hiroki
•
677.5K views
実践イカパケット解析
Yuki Mizuno
•
118.5K views
Similar to HTTP/2 入門
http2 最速実装 v2
Yoshihiro Iwanaga
10.6K views
•
37 slides
Amalgam8 application switch for cloud native services
Takehiko Amano
2.2K views
•
20 slides
QUIC標準化動向 〜2017/7
Kazuho Oku
9.8K views
•
37 slides
DB tech showcase_tokyo2018_LOCONDO
Shinya Sugiyama
9.2K views
•
46 slides
JOSUG 34th Meetup
irix_jp
1.4K views
•
21 slides
Locondo 20190215@ec tech_group
Shinya Sugiyama
956 views
•
42 slides
Similar to HTTP/2 入門
(20)
http2 最速実装 v2
Yoshihiro Iwanaga
•
10.6K views
Amalgam8 application switch for cloud native services
Takehiko Amano
•
2.2K views
QUIC標準化動向 〜2017/7
Kazuho Oku
•
9.8K views
DB tech showcase_tokyo2018_LOCONDO
Shinya Sugiyama
•
9.2K views
JOSUG 34th Meetup
irix_jp
•
1.4K views
Locondo 20190215@ec tech_group
Shinya Sugiyama
•
956 views
ネットワークプログラマビリティ勉強会
Tomoya Hibi
•
2.6K views
猿でもわかる DevOps
Tsuyoshi Miyake
•
143 views
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Preferred Networks
•
2.6K views
Robotech2012講習会v01最終版v2
Yuki Suga
•
1.1K views
Azure IoT 最新アップデート!_IoTビジネス共創ラボ 第7回勉強会
IoTビジネス共創ラボ
•
365 views
Azure IoT 最新アップデート!_IoTビジネス共創ラボ 第7回勉強会
IoTビジネス共創ラボ
•
1.1K views
WebRTC開発者向けプラットフォーム SkyWayの裏側
Yusuke Naka
•
27.6K views
openstack_neutron-dvr_os5thaniv_20150713
Takehiro Kudou
•
2.5K views
L2 over L3 ecnaspsulations
Motonori Shindo
•
38.8K views
Sphinx Tutorial at BPStudy#30
Yoshiki Shibukawa
•
2.3K views
VMware NSXがサポートするトンネル方式について
Motonori Shindo
•
4.2K views
PHP, Now and Then 2011
Rui Hirokawa
•
1.3K views
Lagopusで試すFW
Tomoya Hibi
•
2.3K views
Rubykansai 81
Satomi Tsujita
•
552 views
More from Yahoo!デベロッパーネットワーク
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
12.7K views
•
132 slides
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
4.6K views
•
35 slides
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
1.2K views
•
24 slides
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
1.9K views
•
18 slides
LakeTahoe
Yahoo!デベロッパーネットワーク
1.7K views
•
28 slides
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
1.6K views
•
35 slides
More from Yahoo!デベロッパーネットワーク
(20)
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
•
12.7K views
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
•
4.6K views
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
•
1.2K views
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
•
1.9K views
LakeTahoe
Yahoo!デベロッパーネットワーク
•
1.7K views
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
•
1.6K views
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
•
5.8K views
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
•
7.6K views
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
•
2.2K views
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
•
1.9K views
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
•
2.2K views
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
•
1.8K views
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
•
2.1K views
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
•
2.1K views
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
•
2.3K views
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
•
1.9K views
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
•
1.9K views
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
•
2.2K views
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
•
2.1K views
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
•
2K views
Recently uploaded
ReonHata_JSAI2023
Matsushita Laboratory
12 views
•
33 slides
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
85 views
•
31 slides
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
NTT DATA Technology & Innovation
20 views
•
21 slides
松下研究室紹介_関西大学高槻キャンパスオープンキャンパス
Matsushita Laboratory
21 views
•
23 slides
20230912JSSST大会基調講演_丸山.pdf
Hiroshi Maruyama
152 views
•
58 slides
HarukiShinkawa_FIT2023
Matsushita Laboratory
17 views
•
24 slides
Recently uploaded
(7)
ReonHata_JSAI2023
Matsushita Laboratory
•
12 views
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
•
85 views
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
NTT DATA Technology & Innovation
•
20 views
松下研究室紹介_関西大学高槻キャンパスオープンキャンパス
Matsushita Laboratory
•
21 views
20230912JSSST大会基調講演_丸山.pdf
Hiroshi Maruyama
•
152 views
HarukiShinkawa_FIT2023
Matsushita Laboratory
•
17 views
gtk4_gem_usage.pdf
ssuser0ef4681
•
9 views
HTTP/2 入門
1.
HTTP/2 ⼊入⾨門
2.
⽯石澤 基 CMO室
エンジニア
3.
この資料料の内容 • HTTP/2 の歴史
• HTTP/2 の特徴 • HTTP/2 の最新動向
4.
HTTP/2 の歴史
5.
現在までの流流れ 2012/01: IETF HTTPbis
WGで次世代のHTTPの話が出始める 2012/06: HTTP/2の議論論を開始するための草案が提出される 2012/11: SPDYを議論論の開始点として策定が始まる 2013/01: 最初の草案がリリースされる 2013/08: 最初の実装向け草案がリリースされる 2014/05: <今はココ!> 2014/07: 最終草案リリース (WGラストコール) (予定)
6.
SPDY? Webページの読み込みレイテンシを削減することを目標として、 Googleが開発している実験用の転送プロトコルです。 ! Googleは自社サイトとChromeにSPDYを適用することで、プロトコル の評価を進めていました。そのような実績が高く評価され、HTTP/2の 議論の出発点として、SPDYが採用されました。 ! 現在では、TwitterやFacebookといったサービスをはじめ、Firefox、 Internet ExplorerといったブラウザもSPDYをサポートしています。
7.
よくある質問 現在のHTTPにあるような、リクエストやレスポンス、 ヘッダーなどの仕組みそのものに変更更はありますか? ?
8.
よくある質問 いいえ、変更更はありません。 !(一部の例外は除く)
9.
よくある質問 This document addresses
these issues by defining an optimized mapping of HTTP's semantics to an underlying connection. “ ― HTTP/2 Draft, Introduction
10.
HTTP/2 の⽬目的 HTTPの構文に最適化された転送手段を提供することで、従来のHTTPで おきていたパフォーマンス上の問題を解決します。 • よりスケーラブルに処理理可能なメッセージ構造の提供
• 単⼀一の接続上で複数のリクエストを送信する仕組みの提供 • 冗⻑⾧長なヘッダーに対する効率率率のよい符号化⽅方式の提供
11.
HTTP/2 の特徴
12.
接続の開始 ALPN https:// から始まるURLで使⽤用します。SSLハンドシェイクの際にアプ リケーションが使⽤用するプロトコルを決定します。
! HTTP Upgrade http:// から始まるURLで使⽤用します。最初にHTTP/1.1のリクエストを 送信してから、以降降の通信をHTTP/2に切切り替えます。 HTTP/2では、今まで通り http:// および https:// のURLを使用します。 そのため、HTTP/2の接続を開始するためには、プロトコルを切り替える 仕組みが必要となっています。
13.
Application Layer Protocol
Negotiation (ALPN) SSL ハンドシェイク クライアント サーバー ClientHello ServerHello ALPN Extension HTTP/1 SPDY/3 h2 ALPN Extension Selected Protocol h2
14.
HTTP Upgrade HTTP Upgrade クライアント
サーバー リクエスト レスポンス GET /index.html HTTP/1.1 Host: www.yahoo.co.jp Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: 4389978938ab379 HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: h2c ! <HTTP/2 データ....>
15.
バイナリフレーム HTTP/1.xまでは全てのデータがテキストで送信されていましたが、 HTTP/2では全てバイナリフレームと呼ばれる単位に分割されます。 バイナリフレームの種類 フレームタイプ 概要 DATA リクエストボディや、レスポンスボディを転送するフレーム HEADERS
圧縮済みのHTTPヘッダーを転送するフレーム PRIORITY ストリームの優先度を変更するフレーム RST_STREAM ストリームの終了を通知するフレーム SETTINGS 接続に関する設定を変更するフレーム PUSH_PROMISE サーバーからのリソースのプッシュを通知するフレーム PING 接続状況を確認するフレーム GOAWAY 接続を終了するフレーム WINDOW_UPDATE フロー制御ウインドウを更新するフレーム CONTINUATION HEADERSフレームやPUSH_PROMISEフレームの続きのデータを転送するフレーム ALTSVC 代替サービスの情報を提供するフレーム BLOCKED 送信がブロックされていることを通知するフレーム
16.
バイナリフレーム POST /upload HTTP/1.1 Host:
www.yahoo.co.jp Content-Type: image/jpeg Content-Length: 123 ! {バイナリデータ} HTTP/1.1 リクエスト HTTP/2 フレーム HEADERS :method: POST :scheme: http :authority: www.yahoo.co.jp :path: /upload content-‐‑‒type: image/jpeg content-‐‑‒length: 123 DATA {バイナリデータ}
17.
バイナリフレーム HTTP/1.1 200 OK Content-Type:
image/jpeg Content-Length: 123 ! {バイナリデータ} HTTP/1.1 レスポンス HTTP/2 フレーム HEADERS :status: 200 content-‐‑‒type: image/jpeg content-‐‑‒length: 123 DATA {バイナリデータ}
18.
バイナリフレーム フレームヘッダー 0 1 2
3! 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+! | R | Length (14) | Type (8) | Flags (8) |! +-+-+-----------+---------------+-------------------------------+! |R| Stream Identifier (31) |! +-+-------------------------------------------------------------+! | Frame Payload (0...) ...! +---------------------------------------------------------------+ 0 1 2 3! 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+! | Pad High? (8) | Pad Low? (8) |! +-+-------------+---------------+-------------------------------+! |E| Stream Dependency? (31) |! +-+-------------+-----------------------------------------------+! | Weight? (8) |! +---------------+-----------------------------------------------+! | Header Block Fragment (*) ...! +---------------------------------------------------------------+! | Padding (*) ...! +---------------------------------------------------------------+ HEADERSフレーム ペイロード
19.
クライアント サーバー HTTP/2 接続 ストリーム
#1 ストリーム #3 ストリーム #5 レスポンス リクエスト リクエスト ストリームによる多重化
20.
ストリームによる多重化 HTTP/1.x クライアント サーバー HTTP/1.x (パイプライン) クライアント
サーバー リクエスト #1 レスポンス #1 レスポンス #2 リクエスト #2 リクエスト #1 リクエスト #2 リクエスト #3 レスポンス #1 レスポンス #2 レスポンス #3
21.
ストリームによる多重化 HTTP/2 クライアント サーバー リクエスト #1 リクエスト
#2 リクエスト #3 レスポンス #1 レスポンス #2 レスポンス #3
22.
ヘッダー圧縮 HTTP 1.xでは、UserAgentやCookieといったHTTPヘッダーが何度度も同 じ内容で送信されており、オーバーヘッドが⽣生じていることが分かって います。 ! SPDYではHTTPヘッダーをgzip圧縮することで、これに対処しました。 しかし、CRIMEと呼ばれる攻撃⼿手法が⾒見見つかったため、圧縮率率率を下げざ るをえなくなってしまいました。
! そこで、HTTP/2では、ヘッダーの差分だけを送るアルゴリズムを使っ たHPACKと呼ばれるヘッダー圧縮機構を採⽤用しています。
23.
HPACK 前回送信したヘッダー名/値ペアのセットです。 クライアントやサーバーは、ヘッダーの差分を計算するために接続ごと にリファレンスセットを保持します。 Reference Set よく送信されるヘッダー名/値ペアにIDを設定したものを管理するテーブ ルです。クライアントとサーバーの両方で保持されます。送信するヘッ ダーがこのテーブルに含まれていた場合は、設定されたIDを使用してヘッ ダーを送信することができます。 Static Table HPACKで使われる⽤用語を簡単に理理解しておきましょう。
24.
HPACK :method: GET :scheme: http :path:
/ :authority: www.yahoo.co.jp user-agent: chrome 送信するヘッダー (1回⽬目) エンコード済みヘッダー 1 2 3 4: www.yahoo.co.jp user-agent: chrome ③エンコード Reference Set なし ①差分確認 Static Table ID ヘッダー名 値 1 :method GET 2 :scheme http 3 :path / 4 :authority ②検索索
25.
HPACK :method: GET :scheme: http :path:
/css/yahoo.css :authority: www.yahoo.co.jp user-agent: chrome custom: yahoo 送信するヘッダー (2回⽬目) エンコード済みヘッダー 3: /css/yahoo.css custom: yahoo ③エンコード Static Table ID ヘッダー名 値 1 :method GET 2 :scheme http 3 :path / 4 :authority ②検索索 Reference Set ①差分確認 :method: GET :scheme: http :path: / :authority: www.yahoo.co.jp user-agent: chrome
26.
サーバープッシュ あるレスポンスに必要なリソースを事前にサーバーから送信するための仕 組みです。事前に送られたリソースはクライアント側でキャッシュされ るため、クライアントはリクエストを送信する必要がなくなります。 クライアント サーバー レスポンス リクエスト サーバープッシュ #2 サーバープッシュ
#1 index.html をください index.html を表⽰示するには、 yahoo.css が必要だから先に送るね index.html を表⽰示するには、 logo.png も必要だから先に送るね index.html を送るね
27.
サーバープッシュの活⽤用例例 トランシーバーアプリの「Voxer」ではSPDYのサーバープッシュの機能 を活用して、音声メッセージのプッシュを実現しているそうです。 クライアントA サーバー レスポンス リクエスト サーバープッシュ Aさんに メッセージを送信 クライアントB リクエスト 私宛のメッセージが
あればプッシュして ください Bさんからの メッセージを受信 送信完了了!
28.
ストリーム優先度度 特定のリソースを優先的に取得したいような場合、クライアントはフレー ムに優先度情報を含めることで、サーバーの処理順序を制御することが できる可能性があります。 クライアント サーバー レスポンス #2 リクエスト
#1 2つめのリクエストを優先で 処理理してください。 2つめのリクエストを優先した ので先に返します。 リクエスト #2 (+優先度度情報) レスポンス #1
29.
HTTP/2 の最新動向
30.
HTTP/2 に対応した実装 HTTP/2プロトコルを実装したライブラリは既に複数公開されています。 これらのライブラリを使用すれば、HTTP/2の検証やテストをはじめる ことができます。 実装 言語
ロール 対応する草案 nghttp2 C クライアント、サーバー、プロキシ Draft 12 http2-katana C# サーバー Draft 09 node-http2 Node.js サーバー、クライアント Draft 12 Netty Java サーバー、クライアント Draft 12 Wireshark C その他 Draft 12 Okhttp Java クライアント (Android) Draft 12 curl / libcurl C クライアント Draft 12
31.
各社の動向 実装に積極的に参加しています。HPACKのJava実装を公開したり、サー ビスの本番環境ですでにHTTP/2をデプロイするなど、積極的にパフォー マンスなどを調査しています。 Twitter 仕様策定と実装で積極的に参加しています。C#で実装されたKatanaサー バーのHTTP/2対応をしたり、IEについても「HTTP/2に備える」とブロ グで発信するなど、積極的にサポートしていくようです。 Microsoft 仕様策定と実装で積極的に参加しています。最新のドラフト版に対応し たFirefoxが開発されており、実際に使って試すことができます。 Mozilla
32.
参考情報 http://www.oreilly.co.jp/books/9784873116761/
33.
Enjoy HTTP/2 :)