Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
HTTP/2 Deep Dive: Priority & Server Push
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Moto Ishizawa
May 21, 2015
Technology
3.7k
17
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
HTTP/2 Deep Dive: Priority & Server Push
Moto Ishizawa
May 21, 2015
More Decks by Moto Ishizawa
See All by Moto Ishizawa
LLM エージェントを使った実験
summerwind
0
1.4k
カンムにおけるプロダクトセキュリティのこれまでとこれから
summerwind
1
3.2k
Sharing test cases of internet protocols with Go and OCI Artifacts
summerwind
0
1.3k
Using Thanos as a long-term storage for your Prometheus metrics
summerwind
1
13k
Using Kubernetes as a datastore for SPIRE
summerwind
1
1.3k
Whitebox Controller
summerwind
5
1.9k
Managing Kubernetes manifests with Spruce
summerwind
2
4.7k
Understanding HTTP/2 prioritization
summerwind
16
6.5k
HTTP/2 Server Push Considered Harmful
summerwind
1
2.3k
Other Decks in Technology
See All in Technology
Adversary Infrastructure Hunting101
disconinja
0
160
200人の配信コメント、 全部Jevが仕分けます 〜 マサカリガードを作ってみた 〜
katayamatg
0
180
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
550
(swiftc) NonCopyableとライフタイム修飾子
teamhimeh
0
130
DevelopersIO 2026 Tokyo 現時点の衛星通信サービスの現状を整理してみる
maroon1st
0
310
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
210
Metadata - Section 2: Simple Metadata & Meta Tags
mohab1
0
140
局所最適は悪ではない。壊れているのは指標です。量と質を同時に見る先行指標の設計
recruitengineers
PRO
2
1.2k
Claude Code をローカルとサーバー上で利用した際の Bedrock 利用料をユーザー単位で一本化してみる
ohorig
0
160
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
220
1週間、Opus封印でお願いします
kintotechdev
0
210
Devin プロモコードの受け取りと適用(2026.10.27)
kinopeee
0
560
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Designing Powerful Visuals for Engaging Learning
tmiket
1
620
How to train your dragon (web standard)
notwaldorf
96
6.9k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Navigating Weather and Climate Data
rabernat
0
560
We Have a Design System, Now What?
morganepeng
55
8.4k
Skip the Path - Find Your Career Trail
mkilby
1
260
ラッコキーワード サービス紹介資料
rakko
4
5.5M
Building Flexible Design Systems
yeseniaperezcruz
330
41k
The Curse of the Amulet
leimatthew05
3
16k
New Earth Scene 8
popppiees
4
2.7k
Transcript
HTTP/2 Deep Dive: Priority & Server Push Moto Ishizawa @summerwind
Moto Ishizawa @summerwind
͜ͷࢿྉͷτϐοΫ • HTTP/2 ͷ Priority ʹ͍ͭͯ • Priority ͷΈ •
࣮ʹ͓͚Δ Priority ͷαϙʔτঢ়گ • Priority ͕༗ޮͳ߹ͷετϦʔϜͷ࣮ࡍͷಈ͖ • HTTP/2 ͷ Server Push ʹ͍ͭͯ • Server Push ͷΈ • ࣮ʹ͓͚Δ Server Push ͷαϙʔτঢ়گ • Preload Λ༻͍ͨ Server Push • Server Push ͱ Priority ͷؔ
Priority
HTTP/2 Priority • ϦΫΤετͷ༏ઌΛࢦఆͰ͖ΔΈ • ΫϥΠΞϯτ͕αʔόʔʹରͯ͠ࢦఆ͢Δ • αʔόʔඞͣ͠ै͏ඞཁͳ͍ (͋͘·Ͱώϯτ) •
ॏΈ͚͚ͩͰͳ͘ɺετϦʔϜͷґଘؔࢦఆͰ͖Δ • HEADERS ϑϨʔϜͰ৽͍͠ετϦʔϜͷ༏ઌΛࢦఆՄೳ • PRIORITY ϑϨʔϜͰطଘͷετϦʔϜͷ༏ઌΛมߋՄೳ Client Server HEADERS #1 (Priority 16) HEADERS #1 HEADERS #3 HEADERS #3 (Priority 256) DATA #3 DATA #3 DATA #1 DATA #3
HTTP/2 Priority Tree 0 3 128 5 64 7 16
9 16 ετϦʔϜID ॏΈ ґଘؔ
HTTP/2 Priority Tree 0 3 128 5 64 7 16
9 16 σϑΥϧτͷॏΈ 16 σϑΥϧτͰετϦʔϜID 0 ʹґଘ͢Δ
HTTP/2 Priority Tree 0 3 128 5 64 7 16
9 16 Ϧιʔεɺ༏ઌॏΈͷ૬ରతͳൺͰܾఆ͞ΕΔɻ ετϦʔϜID 3 શϦιʔεͷ 2/3 ׂ͕ΓͯΒΕΔɻ
HTTP/2 Priority Tree 0 3 128 5 64 7 16
9 16 ଞͷετϦʔϜʹґଘ͢ΔετϦʔϜͷϦιʔεɺґଘઌετϦʔϜͷϦιʔεʹج͍ͮͯܭࢉ͞ΕΔɻ ετϦʔϜID 7 ɺετϦʔϜID 3 ͷϦιʔεͷ 1/2 (Ϧιʔεશମͷ 1/3) ׂ͕ΓͯΒΕΔɻ
࣮ʹ͓͚Δ Priority ͷαϙʔτঢ়گ αʔόʔ ࣮ όʔδϣϯ αϙʔτ nghttp2 1.0.0 ͋Γ
H2O 1.2.0 ͋Γ Apache Traffic Server 5.3.0 ͳ͠ ϒϥβ ࣮ όʔδϣϯ αϙʔτ Firefox 38.0.1 ͋Γ Chrome 43.0.2357.65 ͋Γ (ॏΈ͚ͷΈ) Edge 0.11.10074.0 ͳ͠
Priority ͷݕূ • ݕূ༻ͷϖʔδΛ֤ϒϥβͰಡΈࠐΉ • αʔόʔ nghttpx 1.0.0 Λ༻ •
ݕূ༻ϖʔδͷ༷ • head ཁૉʹஔͨ͠ CSS × 3 • head ཁૉʹஔͨ͠ JavaScript × 3 • body ཁૉʹஔͨ͠ JavaScript × 3 • body ཁૉʹஔͨ͠ը૾ × 3 • ϦιʔεͷαΠζશͯ 100 KB <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Test</title> <link href="tests/1.css" rel="stylesheet"> <link href="tests/2.css" rel="stylesheet"> <link href="tests/3.css" rel="stylesheet"> <script src="tests/1.js"></script> <script src="tests/2.js"></script> <script src="tests/3.js"></script> </head> <body> <h1>Test</h1> <img src=“tests/1.jpg” alt="1"> <img src=“tests/2.jpg“ alt="2"> <img src=“tests/3.jpg” alt="3"> <script src="tests/4.js"></script> <script src="tests/5.js"></script> <script src="tests/6.js"></script> </body> </html>
Firefox ͕ੜ͢Δ Priority Tree 9 1. ϦΫΤετલ 0 3 7
201 1 1 11 1 5 101 ༏ઌπϦʔ͕ॳظԽ͞ΕΔɻ ༏ઌશͯ PRIORITY ϑϨʔϜͰࢦఆ͞ΕΔɻ
Firefox ͕ੜ͢Δ Priority Tree 9 2. HTML ͷϦΫΤετ 0 3
7 201 1 1 13 32 11 1 5 101 HTML ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
Firefox ͕ੜ͢Δ Priority Tree 9 3. CSS ͷϦΫΤετ 0 3
7 201 1 1 13 32 19 32 17 32 15 32 11 1 5 101 CSS ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
Firefox ͕ੜ͢Δ Priority Tree 9 25 4. head ཁૉͷ JS
ͷϦΫΤετ 0 3 7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 5 101 head ཁૉͷ JS ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
Firefox ͕ੜ͢Δ Priority Tree 9 25 5. ը૾ͷϦΫΤετ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 5 101 ը૾ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
Firefox ͕ੜ͢Δ Priority Tree 9 25 6. body ཁૉͷ JS
ͷϦΫΤετ 0 3 7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101 body ཁૉͷ JS ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree 9 25 7. Ϩεϙϯεͷड৴ 0 3
7 201 1 1 32 13 32 19 32 21 32 23 32 17 32 15 32 11 1 27 22 29 22 31 22 35 32 37 32 33 32 5 101
Firefox ͕ੜ͢Δ Priority Tree ͷߟ • ࠷ॳʹ PRIORITY ϑϨʔϜͰͷେ͕ߏ͞ΕΔ •
CSS JSɺը૾ͷछྨ͝ͱʹॏΈ͚Λ͏·͍ͬͯ͘Δ • సૹͷॱং • ͓͓ΑͦɺCSSɺhead ཁૉ JSɺbody ཁૉ JSɺը૾ ͷॱʹͳ͍ͬͯΔ • Firefox ͕ҙਤͨ͠௨Γʹసૹ͞Ε͍ͯΔͱࢥΘΕΔ
Chrome ͕ੜ͢Δ Priority Tree 1. HTML ͷϦΫΤετ 0 1 256
HTML ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
5 Chrome ͕ੜ͢Δ Priority Tree 2. CSS ͷϦΫΤετ 0 1
256 3 220 220 7 220 CSS ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
5 Chrome ͕ੜ͢Δ Priority Tree 3. head ཁૉͷ JS ͷϦΫΤετ
0 1 256 3 220 220 7 220 9 183 11 183 13 183 head ཁૉͷ JS ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
5 Chrome ͕ੜ͢Δ Priority Tree 4. body ཁૉͷ JS ͷϦΫΤετ
0 1 256 15 183 17 183 19 183 3 220 220 7 220 9 183 11 183 13 183 body ཁૉͷ JS ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ
5 Chrome ͕ੜ͢Δ Priority Tree 5. ը૾ͷϦΫΤετ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 ը૾ͷϦΫΤετͷετϦʔϜɻ ༏ઌ HEADERS ϑϨʔϜͰࢦఆ͞ΕΔɻ 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
5 Chrome ͕ੜ͢Δ Priority Tree 6. Ϩεϙϯεͷड৴ 0 1 256
3 220 220 7 220 9 183 11 183 13 183 21 110 23 110 25 110 15 183 17 183 19 183
Chrome ͕ੜ͢Δ Priority Tree ͷߟ • શͯͷετϦʔϜ͕ ID 0 ʹґଘ͢Δߏ
• Firefox ͱൺֱ͢Δͱγϯϓϧͳ༏ઌͷׂΓͯ • ׂΓͯΒΕΔϦιʔεͷׂ߹ͷ͕ࠩগͳ͍ • CSS : JS : ը૾ = 10 : 8 : 5 • େ͖ͳը૾Ϧιʔε͕૿͑ΔͱɺCSS JS ͷసૹ્͕͞ΕΔՄೳੑ͕͋Γͦ͏ • ը૾ͷॏΈΛͬͱখͯ͘͞͠Α͍ͷ͔͠Εͳ͍
Edge ͕ੜ͢Δ Priority Tree 1. HTML ͷϦΫΤετ 0 1 16
5 Edge ͕ੜ͢Δ Priority Tree 2. ֤ϦιʔεͷϦΫΤετ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16 CSSɺhead ཁૉͷ JSɺը૾ɺbody ཁૉͷ JS ͷϦΫΤετͷετϦʔϜɻ ༏ઌશͯະࢦఆͷͨΊɺσϑΥϧτͷॏΈͰ͋Δ 16 ׂ͕ΓͯΒΕΔɻ
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
5 Edge ͕ੜ͢Δ Priority Tree 3. Ϩεϙϯεͷड৴ 0 1 16
15 16 17 16 19 16 3 16 16 7 16 9 16 11 16 13 16 21 16 23 16 25 16
Edge ͕ੜ͢Δ Priority Tree ͷߟ • Firefox Chrome ͱҟͳΓ༏ઌະࢦఆ
• શͯͷετϦʔϜʹσϑΥϧτͷॏΈ 16 ׂ͕ΓͯΒΕΔ • ༏ઌ͕ະࢦఆͷͨΊɺαΠζͷখ͞ͳϦιʔε͔Βసૹ͕ྃ͢Δ • େ͖ͳը૾Ϧιʔε͕૿͑ΔͱɺCSS JS ͷసૹ͕େ્͖͘͞ΕΔՄೳੑ͕͋Γͦ͏ • ਖ਼ࣜ൛Ͱͷ༏ઌͷ࣮ʹظ
Server Push
HTTP/2 Server Push • ͋ΔϦιʔεʹඥͮ͘ϦιʔεΛϦΫΤετͳ͠ʹૹΔ • ໊લͷ௨Γαʔόʔଆ͕ϓογϡ͢ΔΈ • ࠷ॳʹ PUSH_PROMISE
ϑϨʔϜͰ௨͕͘Δ • ΫϥΠΞϯτ RST_STREAM ϑϨʔϜͰڋ൱Ͱ͖Δ Client Server HEADERS #1 PUSH_PROMISE #1 (Promised Stream #3) HEADERS #3 HEADERS #1 DATA #3 DATA #1 DATA #3 DATA #1
࣮ʹ͓͚Δ Server Push ͷαϙʔτঢ়گ αʔόʔ ࣮ όʔδϣϯ αϙʔτ nghttp2 1.0.0
͋Γ (Preload) H2O 1.2.0 ͋Γ (Preload) Apache Traffic Server 5.3.0 ͳ͠ ϒϥβ ࣮ όʔδϣϯ αϙʔτ Firefox 38.0.1 ͋Γ Chrome 43.0.2357.65 ͋Γ Edge 0.11.10074.0 ͋Γ
Preload ʹΑΔ Server Push Link: </css/style.css>; rel=preload Link: </js/track.js>; rel=preload
nghttp2 H2O Preload ༷ʹج͍ͮͨ Server Push Λαϙʔτ͍ͯ͠Δɻ ͜ΕΒͷαʔόʔΛ Reverse Proxy ͱͯ͠༻͍ͯ͠Δ߹ɺΦϦδϯαʔόʔͷϨεϙϯεʹ ҎԼͷΑ͏ͳ Link ϔομʔΛ༩͓ͯ͘͜͠ͱͰɺϔομʔʹࢦఆͨ͠ϦιʔεΛ Proxy ͕ࣗಈ औಘ্ͨ͠ͰɺServer Push ͱͯ͠ɺͦͷϦιʔεΛΫϥΠΞϯτʹૹ৴͢Δɻ ※ nghttp2 ʹଐͷ nghttpx ɺΦϦδϯαʔόʔ͕ฦ͢Ϩεϙϯεͷεςʔλε͕ 200 Ͱͳ͍ͱ Server Push ͕ൃಈ͠ͳ͍ ɹͳͲɺ͍͔͕ͭ݅͋͘ΔͷͰҙ͕ඞཁɻ
Server Push ΛΈ߹Θͤͨ Priority ͷݕূ • ࣮ࢪํ๏ Priority ͷݕূ࣌ͱಉ͡ •
αʔόʔϓογϡ Preload ํࣜΛ༻ • ݕূ༻ϖʔδͷ༷ΛҰ෦มߋ • head ཁૉʹஔͨ͠ CSS × 3 • head ཁૉʹஔͨ͠ JavaScript × 3 • body ཁૉʹஔͨ͠ JavaScript × 3 • body ཁૉʹஔͨ͠ը૾ × 3 • ֤Ϧιʔεͷ࠷ॳͷ1ݸϓογϡ͢Δ <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Test</title> <link href="tests/1.css" rel="stylesheet"> <link href="tests/2.css" rel="stylesheet"> <link href="tests/3.css" rel="stylesheet"> <script src="tests/1.js"></script> <script src="tests/2.js"></script> <script src="tests/3.js"></script> </head> <body> <h1>Test</h1> <img src=“tests/1.jpg” alt="1"> <img src=“tests/2.jpg” alt="2"> <img src=“tests/3.jpg” alt="3"> <script src="tests/4.js"></script> <script src="tests/5.js"></script> <script src="tests/6.js"></script> </body> </html>
0 Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 1.
HTML ͷϦΫΤετ 3 7 201 1 1 13 32 11 1 5 101
0 Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 2.
ϓογϡετϦʔϜͷ։࢝ 3 7 201 1 1 13 32 11 1 5 101 2 16 4 16 6 16 8 16 ϓογϡετϦʔϜͷετϦʔϜ ID ۮʹͳΔɻ PUSH_PROMISE ϑϨʔϜ͕ૹ৴͞ΕͨετϦʔϜʹґଘ͢Δɻ
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 3. ϓογϡετϦʔϜͷ༏ઌมߋ
3 7 201 1 1 13 32 11 1 5 101 2 2 4 2 6 2 8 2 0 PRIORITY ϑϨʔϜʹΑΓґଘઌͱॏΈ͕มߋʹɻ ετϦʔϜͷσʔλ·ͩసૹதɻ
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 4. ϓογϡετϦʔϜͷड৴
3 7 201 1 1 13 32 11 1 5 101 2 2 4 2 6 2 8 2 0
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 4. ϓογϡετϦʔϜͷड৴
3 7 201 1 1 13 32 11 1 5 101 2 2 4 2 6 2 8 2 0
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 4. ϓογϡετϦʔϜͷड৴
3 7 201 1 1 13 32 11 1 5 101 2 2 4 2 6 2 8 2 0
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 4. ϓογϡετϦʔϜͷड৴
3 7 201 1 1 13 32 11 1 5 101 2 2 4 2 6 2 8 2 0
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 4. ϓογϡετϦʔϜͷड৴
3 7 201 1 1 13 32 11 1 5 101 2 2 4 2 6 2 8 2 0
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 5. ֤ϦιʔεͷϦΫΤετ
3 7 201 1 1 13 32 19 32 21 32 17 32 15 32 11 1 23 22 25 22 29 32 27 32 5 101 2 2 4 2 6 2 8 2 0
Firefox ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 9 6. Ϩεϙϯεͷड৴
3 7 201 1 1 13 32 19 32 21 32 17 32 15 32 11 1 23 22 25 22 29 32 27 32 5 101 2 2 4 2 6 2 8 2 0
Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 1. HTML ͷϦΫΤετ
0 1 256
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 2. ϓογϡετϦʔϜͷ։࢝
0 1 256 2 16 16 6 16 8 16 ϓογϡετϦʔϜͷετϦʔϜ ID ۮʹͳΔɻ PUSH_PROMISE ϑϨʔϜ͕ૹ৴͞ΕͨετϦʔϜʹґଘ͢Δɻ
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 3. ϓογϡετϦʔϜͷड৴
0 1 256 2 16 16 6 16 8 16
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 3. ϓογϡετϦʔϜͷड৴
0 1 256 2 16 16 6 16 8 16
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 3. ϓογϡετϦʔϜͷड৴
0 1 256 2 16 16 6 16 8 16
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 3. ϓογϡετϦʔϜͷड৴
0 1 256 2 16 16 6 16 8 16
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 3. ϓογϡετϦʔϜͷड৴
0 1 256 2 16 16 6 16 8 16
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 5. ֤ϦιʔεͷϦΫΤετ
0 1 256 7 183 9 183 13 110 2 16 16 6 16 8 16 3 220 5 220 15 110 11 183 17 183
4 Chrome ͕ੜ͢Δ Priority Tree (Server Push ͋Γ) 6. Ϩεϙϯεͷड৴
0 1 256 7 183 9 183 13 110 2 16 16 6 16 8 16 3 220 5 220 15 110 11 183 17 183
Server Push ͷߟ • Firefox ϓογϡετϦʔϜͷ༏ઌΛௐ͢Δ • CSS ͷసૹʹӨڹ͕ͳ͍Α͏ʹɺґଘઌͱॏΈͷ྆ํΛมߋ •
༏ઌϒϥβϓογϡ͢ΔϦιʔεͷͳͲʹΑͬͯมԽ͢Δ • ࠓճݻఆαΠζͷΈͷݕূͩͬͨͷͰɺେ͖͍ը૾ͷϓογϡͳͲͷݕূඞཁ • ͓ͦΒ͘ϕετϓϥΫςΟεଘࡏ͠ͳ͍ͷͰɺຖճ͖ͪΜͱͨ͠ݕূ͕ඞཁ͔ • ͱΓ͋͑ͣ Server Push Λ͍͍ͨʁ • ༏ઌͷ͍Ϧιʔε͚ͩΛগͳ͍Ͱϓογϡ͢Εେ͖ͳʹͳΒͳͦ͞͏ • ྫ͑ΠϯϥΠϯʹ͍ͯͨ͠ը૾ͱ͔
͓ͬ͠ΌΔ௨ΓͰͨ͠…
·ͱΊ • HTTP/2 ͷύϑΥʔϚϯεΛཧղ͢ΔʹɺPriority ʹର͢Δཧղ͕ॏཁ • Priority ͷѻ͍ɺαʔόʔΫϥΠΞϯτ͝ͱʹҟͳΔ • ґଘؔॏΈ͚ͩͰͳ͘ɺϑΝΠϧαΠζϦΫΤετॱংͷߟྀඞཁ
• ࣮ࡍʹαʔόʔͱΫϥΠΞϯτΛΈ߹Θͤͯܭଌͯ͠ͳ͍ͱ͔Βͳ͍ࣄଟ͍ • Server Push Λ͏߹ɺPriority Λߟྀ͢Δඞཁ͕͋Δ • ϓογϡͷΓํʹΑͬͯɺϨϯμϦϯά͕͘ͳΔέʔε͋Γ͑ͦ͏ • Priority ؚΊ͖ͯͪΜͱܭଌ͠ɺධՁ͢Δඞཁ͕͋Δ
Thank you :-)