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
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.1k
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.2k
Whitebox Controller
summerwind
5
1.9k
Managing Kubernetes manifests with Spruce
summerwind
2
4.6k
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
Webとヘルスデータ
yukukotani
1
360
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
130
Claude Code本って、 読む必要あるの?
oikon48
2
380
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
290
omasushiというライブラリを作った
polidog
PRO
0
190
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
150
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
130
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
310
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
150
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
0
150
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
960
module Synths; end
asonas
1
130
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
30 Presentation Tips
portentint
PRO
1
390
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to Talk to Developers About Accessibility
jct
2
540
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
We Have a Design System, Now What?
morganepeng
55
8.3k
WCS-LA-2024
lcolladotor
0
820
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
Music & Morning Musume
bryan
47
7.4k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
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 :-)