Suche senden
Hochladen
http2 最速実装 v2
•
20 gefällt mir
•
10,654 views
Yoshihiro Iwanaga
Folgen
http2 ハッカソン#2 の資料です
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 37
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
HTTP/2の現状とこれから
HTTP/2の現状とこれから
shigeki_ohtsu
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
Jun Kato
MQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
Apache Arrow
Apache Arrow
Kouhei Sutou
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Empfohlen
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
HTTP/2の現状とこれから
HTTP/2の現状とこれから
shigeki_ohtsu
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
Jun Kato
MQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
Apache Arrow
Apache Arrow
Kouhei Sutou
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
std::pin の勘所
std::pin の勘所
Hiroaki Goto
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Kouhei Sutou
電子署名(PKI)ハンズオン資料 V1.00
電子署名(PKI)ハンズオン資料 V1.00
Naoto Miyachi
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
whywaita
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
IX事業者とインターネットの未来
IX事業者とインターネットの未来
Yoshiki Ishida
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
akira6592
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
Yahoo!デベロッパーネットワーク
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
株式会社 NTTテクノクロス
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
VirtualTech Japan Inc.
L2 over L3 ecnaspsulations
L2 over L3 ecnaspsulations
Motonori Shindo
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会
Tomoya Hibi
Weitere ähnliche Inhalte
Was ist angesagt?
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
std::pin の勘所
std::pin の勘所
Hiroaki Goto
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Kouhei Sutou
電子署名(PKI)ハンズオン資料 V1.00
電子署名(PKI)ハンズオン資料 V1.00
Naoto Miyachi
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
whywaita
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
IX事業者とインターネットの未来
IX事業者とインターネットの未来
Yoshiki Ishida
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
akira6592
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
Yahoo!デベロッパーネットワーク
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
株式会社 NTTテクノクロス
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
VirtualTech Japan Inc.
Was ist angesagt?
(20)
TLS, HTTP/2演習
TLS, HTTP/2演習
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
Ethernetの受信処理
Ethernetの受信処理
std::pin の勘所
std::pin の勘所
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
電子署名(PKI)ハンズオン資料 V1.00
電子署名(PKI)ハンズオン資料 V1.00
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
Interrupt Affinityについて
Interrupt Affinityについて
IX事業者とインターネットの未来
IX事業者とインターネットの未来
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
冬のLock free祭り safe
冬のLock free祭り safe
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
Ähnlich wie http2 最速実装 v2
L2 over L3 ecnaspsulations
L2 over L3 ecnaspsulations
Motonori Shindo
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会
Tomoya Hibi
DB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDO
Shinya Sugiyama
Locondo 20190215@ec tech_group
Locondo 20190215@ec tech_group
Shinya Sugiyama
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Hideki Saito
Rubykansai 81
Rubykansai 81
Satomi Tsujita
Amalgam8 application switch for cloud native services
Amalgam8 application switch for cloud native services
Takehiko Amano
VMware NSXがサポートするトンネル方式について
VMware NSXがサポートするトンネル方式について
Motonori Shindo
Control distribution of virtual machines
Control distribution of virtual machines
irix_jp
MariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそう
KAWANO KAZUYUKI
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
yoyamasaki
メッチャ役に立つauto_incrementの話
メッチャ役に立つauto_incrementの話
株式会社シャーロック
Segment Routing @ SDN Japan 2013
Segment Routing @ SDN Japan 2013
Miya Kohno
130719 01
130719 01
openrtm
BGP as a method for Abstraction
BGP as a method for Abstraction
Miya Kohno
MySQL 入門的なはなし
MySQL 入門的なはなし
Yuya Takeyama
Apache Drill で日本語を扱ってみよう + オープンデータ解析
Apache Drill で日本語を扱ってみよう + オープンデータ解析
MapR Technologies Japan
osoljp 2011.08
osoljp 2011.08
@ otsuka752
Oracleの実行計画を読んでみよう! #dbts2017
Oracleの実行計画を読んでみよう! #dbts2017
Ryota Watabe
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
Yahoo!デベロッパーネットワーク
Ähnlich wie http2 最速実装 v2
(20)
L2 over L3 ecnaspsulations
L2 over L3 ecnaspsulations
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会
DB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDO
Locondo 20190215@ec tech_group
Locondo 20190215@ec tech_group
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Rubykansai 81
Rubykansai 81
Amalgam8 application switch for cloud native services
Amalgam8 application switch for cloud native services
VMware NSXがサポートするトンネル方式について
VMware NSXがサポートするトンネル方式について
Control distribution of virtual machines
Control distribution of virtual machines
MariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそう
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
メッチャ役に立つauto_incrementの話
メッチャ役に立つauto_incrementの話
Segment Routing @ SDN Japan 2013
Segment Routing @ SDN Japan 2013
130719 01
130719 01
BGP as a method for Abstraction
BGP as a method for Abstraction
MySQL 入門的なはなし
MySQL 入門的なはなし
Apache Drill で日本語を扱ってみよう + オープンデータ解析
Apache Drill で日本語を扱ってみよう + オープンデータ解析
osoljp 2011.08
osoljp 2011.08
Oracleの実行計画を読んでみよう! #dbts2017
Oracleの実行計画を読んでみよう! #dbts2017
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
Mehr von Yoshihiro Iwanaga
Arduino and johnny-five, creating IoT device in easiest way
Arduino and johnny-five, creating IoT device in easiest way
Yoshihiro Iwanaga
Node.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
Yoshihiro Iwanaga
Web Technology for Hardware Control (html5 conference 2015)
Web Technology for Hardware Control (html5 conference 2015)
Yoshihiro Iwanaga
Map
Map
Yoshihiro Iwanaga
Mongodb World 2014
Mongodb World 2014
Yoshihiro Iwanaga
JavaScript と Arduino でオリジナルデバイスを作ろう
JavaScript と Arduino でオリジナルデバイスを作ろう
Yoshihiro Iwanaga
Anomaly Detection by Mean and Standard Deviation (LT at AQ)
Anomaly Detection by Mean and Standard Deviation (LT at AQ)
Yoshihiro Iwanaga
Anomaly detection using correlations of load
Anomaly detection using correlations of load
Yoshihiro Iwanaga
HOTATE (Developers Summit 2012)
HOTATE (Developers Summit 2012)
Yoshihiro Iwanaga
WebComponents LT at AQ
WebComponents LT at AQ
Yoshihiro Iwanaga
20130725 LT at AQ
20130725 LT at AQ
Yoshihiro Iwanaga
Mehr von Yoshihiro Iwanaga
(11)
Arduino and johnny-five, creating IoT device in easiest way
Arduino and johnny-five, creating IoT device in easiest way
Node.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
Web Technology for Hardware Control (html5 conference 2015)
Web Technology for Hardware Control (html5 conference 2015)
Map
Map
Mongodb World 2014
Mongodb World 2014
JavaScript と Arduino でオリジナルデバイスを作ろう
JavaScript と Arduino でオリジナルデバイスを作ろう
Anomaly Detection by Mean and Standard Deviation (LT at AQ)
Anomaly Detection by Mean and Standard Deviation (LT at AQ)
Anomaly detection using correlations of load
Anomaly detection using correlations of load
HOTATE (Developers Summit 2012)
HOTATE (Developers Summit 2012)
WebComponents LT at AQ
WebComponents LT at AQ
20130725 LT at AQ
20130725 LT at AQ
Kürzlich hochgeladen
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Kürzlich hochgeladen
(10)
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
http2 最速実装 v2
1.
HTTP/2 最速実装 v2 @y_iwanaga_
2.
ゴール HTTP/2 クライアント を 最⼩小限の時間
で実装できる状態になる 1. HTTP/2 仕様 を理解 2. 実装に便利な ツール・情報源 を把握
3.
HTTP/2 仕様 1. 全体像を掴む HTTP/1.0,
1.1 どこがダメなの? 設計思想、⽬目的を知ると理理解が早くなる。 それをもとに HTTP/2 はどんな仕様になったの? 接続確⽴立立からレスポンス受信まで 2. 実装解説
4.
30分で HTTP/2 の全要素を解説するのは無理理。 今⽇日は最⼩小限の要素に厳選。
5.
HTTP/1.1 の問題 ブラウザから 張れる接続数の上限: 5 client
server 1 リクエストで TCP コネクションを 1 つ消費。 6個⽬目のリクエストは 送信を待たないといけない。 リクエストを 6個 送りたい ※ Keep-‐‑‒Alive は 3-‐‑‒way handshake を省省略略できるだけ。結局待つことになる。
6.
HTTP/2 では 1つのTCPコネクションで 複数のリクエストを送信 Client Server request response server
push
7.
HTTP/1.1 もう1つの問題 パフォーマンスを改善していくと、 通信の遅延がボトルネックになる ネットワーク品質は⼿手が出せない場合が多い。 けど、送受信するデータサイズを⼩小さくすれば改善できる。 ⼀一般論論
8.
HTTP/2 では ・情報をより⼩小さいデータサイズで表現 ・出来るだけ CPU
とメモリの消費でカバー 設計⽅方針
9.
以上を実現するために
10.
TCP コネクション 1
つで 複数のリクエストを扱うためには 各リクエストの境界を判別する必要がある HTTP/2 では Frame で分割 Client Server req1req2 res1 res2 res1 続き TCP ペイロードの中に複数のデータを連結させる
11.
Frame の定義 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...) ... +---------------------------------------------------------------+ http2-spec の 4.1. Frame Format
12.
Frame の全体像 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...) ... +---------------------------------------------------------------+ その後に Frame Payload が続く 最初の 64bit に Frame Header
13.
Frame の仕様 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...) ... +---------------------------------------------------------------+ R: Reserved. 今は 0 を⼊入れることになっている。
14.
Frame の仕様 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...) ... +---------------------------------------------------------------+ Length: Frame Payload のサイズ ※ Frame Header のサイズを⾜足しちゃダメ J
15.
Frame の仕様 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...) ... +---------------------------------------------------------------+ Type: Frame Type を番号で指定。
16.
Frame の種類 Type ID
タイプ名 意味 0x0 DATA HTTP/1 の Body に相当 0x1 HEADERS HTTP/1 の Header に相当 0x2 PRIORITY ストリームの優先度度 0x3 RST_STREAM ストリームの異異常終了了 0x4 SETTINGS ストリームの設定 0x5 PUSH_PROMISE サーバプッシュ 0x6 PING 死活監視、遅延測定 0x7 GOAWAY コネクション終了了 0x8 WINDOW_UPDATE フロー制御設定 0x9 CONTINUATION HEADERS, PUSH_̲PROMISE の続き 0xa ALTSVC プロトコル切切り替え 0xb BLOCKED フロー制御デバッグ情報 (draft-‐‑‒12のみ)
17.
Frame の仕様 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...) ... +---------------------------------------------------------------+ Flags: 各 bit で複数オプションの On/Off を表現
18.
Frame の仕様 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...) ... +---------------------------------------------------------------+ Stream ID: 各リクエスト、レスポンスを識識別するための ID
19.
Stream ID の意義 データがフラグメントした場合、 どの
Frame の続きなのか判断したい。 そのために Stream ID を利利⽤用 Client Serverres2 res1 続き res1 の⼀一部
20.
stream ID の管理理ルール Client
Server 1 2 3 5 4 6 ・client → server は奇数 ・server → client は偶数 ・0 は全体の制御で利利⽤用
21.
Frame の仕様 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...) ... +---------------------------------------------------------------+ Frame Payload: Frame Type によって構造が違う。 後ほど説明。
22.
Client Server req1req3 req2 res1
res2 res1 続き res3 必要な情報は出揃った。いざ実装!
23.
順番 ServerClient 0. プロトコルネゴシエーション 1. Magic
Octet 2. SETTINGS Frame 3. SETTINGS Frame ACK 4. SETTINGS Frame ACK 5. HEADERS Frame で GET / 6. HEADERS Frame 7. DATA Frame HTTP/2 接続確⽴立立 HTML
24.
1. Magic Octet 0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a PRI
* HTTP/2.0rnrnSMrnrn HTTP/2 をサポートしているか最終チェック HTTP/2 をサポートしないサーバに ALPN しないで直接 HTTP/2リクエストした時に問題を出さないように。 HTTP/1.1 では「PRI メソッドは存在しない」と処理理して終了了。 送信するデータ
25.
順番 ServerClient 0. プロトコルネゴシエーション 1. Magic
Octet 2. SETTINGS Frame 3. SETTINGS Frame ACK 4. SETTINGS Frame ACK 5. HEADERS Frame で GET / 6. HEADERS Frame 7. DATA Frame HTTP/2 接続確⽴立立 HTML
26.
2〜~4. SETTINGS Frame 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identifier (8)| +---------------+-----------------------------------------------+ | Value (32) | +---------------------------------------------------------------+ 下記を 0 個以上。 ※ 受信側は、Payload Length で個数が分かる。 payload の定義 Step 2: Server へ Stream ID = 0, payload 無しで送信 Step 3: Server から Stream ID =0, flags = 0x1 (ACK), payload を受信 Step 4: Client から Stream ID = 0, flags = 0x1 (ACK), payload 無しで送信
27.
順番 ServerClient 0. プロトコルネゴシエーション 1. Magic
Octet 2. SETTINGS Frame 3. SETTINGS Frame ACK 4. SETTINGS Frame ACK 5. HEADERS Frame で GET / 6. HEADERS Frame 7. DATA Frame HTTP/2 接続確⽴立立 HTML
28.
5. HEADERS Frame 最後の難関 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 (*) ... +---------------------------------------------------------------+ flags = END_̲HEADERS | END_̲STREAM stream ID = 1 Header Block Fragment: Payload はここだけになる。 ※ 仕様は HPACK-07 に記載されている。
29.
最短 HPACK http://example.com/ を
GET する場合 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 1 | 0 | +---+---+-----------------------+ | 0 | Name Length (7+) | +---+---------------------------+ | Name String (Length octets) | +---+---------------------------+ | 0 | Value Length (7+) | +---+---------------------------+ | Value String (Length octets) | +-------------------------------+ Name Value :scheme http :authority example.com :path / :method GET Header Block の定義 (Literal Header Field never Indexed & ASCII Encoding パターン) サーバに送信する情報 最後に、4つの Header Block を連結すれば、最短 HPACK 完了了! :scheme は 7 ⽂文字 :scheme は ASCII で 0x3a736368656d65 http は 4 ⽂文字 http は ASCII で 0x68747470
30.
順番 ServerClient 0. プロトコルネゴシエーション 1. Magic
Octet 2. SETTINGS Frame 3. SETTINGS Frame ACK 4. SETTINGS Frame ACK 5. HEADERS Frame で GET / 6. HEADERS Frame 7. DATA Frame HTTP/2 接続確⽴立立 HTML
31.
6〜~7. レスポンス受信 まずは Data
Frame の payload を⾒見見て感動しましょう J この後紹介するサーバ実装は、Indexed で Huffman Encoding 7. DATA Frame 受信 6. HEADERS Frame 受信 この payload に HTML が⼊入ってます。 ここをきちんと実装するにはすごく時間がかかります。 これは後回しにして、先に DATA Frame を⾒見見てみましょう。
32.
実装を効率率率よく進めるために • 仕様ドキュメント – HTTP/2-‐‑‒12 • http://tools.ietf.org/html/draft-‐‑‒ietf-‐‑‒httpbis-‐‑‒ http2-‐‑‒12 – HPACK-‐‑‒07 •
http://tools.ietf.org/html/draft-‐‑‒ietf-‐‑‒httpbis-‐‑‒ header-‐‑‒compression-‐‑‒07 • Public Test Server – nghttp2 (h12c, upgrade/direct) • http://nghttp2.org/
33.
テストサーバ Docker file •
nghttp2 – Direct 接続⽤用 (ALPN 無し) • https://gist.github.com/tsahara/ 7332972d057370d2e686 – ALPN 有り • https://gist.github.com/tsahara/ e6831656d7e2ff99ce7e 提供:tsahara さん
34.
backup slides
35.
エンコーディング • Huffman – 出現頻度度の⾼高い⽂文字を少ない bit
で表現 – でも、今回の実装では使わない • ASCII – ⾮非圧縮。簡単。 – 今回の実装ではこちらを使う
36.
インデックス index Header Name
Header Value 1 :authority 2 :method GET 3 :method POST 4 :path / 5 :path /index.html 6 :scheme http 7 :scheme https 8 :status 200 9 :status 204 (以下略略) よく使うヘッダ名と値を 番号で指定 http://tools.ietf.org/html/ draft-ietf-httpbis-header-compression-07#appendix-B 今回の実装では利利⽤用しません。
37.
リファレンスセット • ヘッダの差分のみを送信するためのテー ブル – 何度度も同じデータを送信しないで済む。 – そのために、サーバとクライアントで学習 テーブルを同期する必要がある。 – 今回の実装では利利⽤用しません
Jetzt herunterladen