Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Web技術の基本 3回目 / Introduction to Web technologies...
Search
muttan
January 05, 2018
Technology
0
250
Web技術の基本 3回目 / Introduction to Web technologies 3rd class
muttan
January 05, 2018
Tweet
Share
More Decks by muttan
See All by muttan
さわやか待ち時間LINE botを作った話 / Sawayaka LINE bot
bath_poo_
0
110
コンテナ開発入門 1回目/Introduction to Container Development 1
bath_poo_
0
170
ISUCONってなんだ / What is ISUCON
bath_poo_
0
370
Web技術の基本 8回目 / Introduction to Web technologies 8th class
bath_poo_
0
190
Web技術の基本 7回目 / Introduction to Web technologies 7th class
bath_poo_
0
160
Web技術の基本 6回目 / Introduction to Web technologies 6th class
bath_poo_
1
260
Web技術の基本 5回目 / Introduction to Web technologies 5th class
bath_poo_
0
140
Web技術の基本 4回目 / Introduction to Web technologies 4th class
bath_poo_
0
220
Web技術の基本 2回目 / Introduction to Web technologies 2nd class
bath_poo_
0
270
Other Decks in Technology
See All in Technology
Debugging Edge AI on Zephyr and Lessons Learned
iotengineer22
0
120
[JAWS-UG 横浜支部 #91]DevOps Agent vs CloudWatch Investigations -比較と実践-
sh_fk2
1
240
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
340
Microsoft Agent 365 を 30 分でなんとなく理解する
skmkzyk
1
1k
AWS Bedrock AgentCoreで作る 1on1支援AIエージェント 〜Memory × Evaluationsによる実践開発〜
yusukeshimizu
6
370
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
チーリンについて
hirotomotaguchi
3
950
AI時代の開発フローとともに気を付けたいこと
kkamegawa
0
2.3k
【CEDEC+KYUSHU2025】学生・若手必見!テクニカルアーティスト 大全 ~仕事・スキル・キャリアパス、TAの「わからない」を徹底解剖~
cygames
PRO
0
150
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
440
最近のLinux普段づかいWaylandデスクトップ元年
penguin2716
1
670
Playwright x GitHub Actionsで実現する「レビューしやすい」E2Eテストレポート
kinosuke01
0
410
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Statistics for Hackers
jakevdp
799
230k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
The Cult of Friendly URLs
andyhume
79
6.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
A Tale of Four Properties
chriscoyier
162
23k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Transcript
Webٕज़ͷجຊ 3ճ Keisuke KAMIYA
ࠓճͷςʔϚ
HTTPͰΓऔΓ͢ΔΈ - લઓ -
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2.0ͷΓͱΓ
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2ͷΓͱΓ
HTTPϝοηʔδ • HTTP(Hyper Text Transfer Protocol) ϋΠύʔςΩετͷΓऔΓΛඪ४Խͨ͠ͷ ‣ ొ1990 όʔδϣϯ
ొ ؆୯ͳઆ໌ )551 ࣌(&5͔͠ແ͔ͬͨ )551 1045ͳͲ (&5Ҏ֎ͷϝιου͕ొ )551 ಉ͡*1ΞυϨεͰҟͳΔυϝΠϯΛ ఏڙ͢Δ)PTUϔομʔͷՃ )551 ετϦʔϜͷՃ
HTTPϝοηʔδ • HTTPͰ, Webϒϥβ(ΫϥΠΞϯτ)͕ཁٻΛૹΓ, Webαʔό(αʔό)͕ͦͷཁٻʹؔͯ͠ԠΛฦ͢ͱ͍ ͏ΓऔΓΛ܁Γฦ͍ͯ͠Δ ‣ HTTPϝοηʔδͱݺΕΔσʔλΛૹड৴͍ͯ͠Δ ཁٻ(HTTP request)
Ԡ(HTTP response) HTTPͷόʔδϣϯ, ͍ํʹ߹ΘͤΒΕΔ. (HTTP/2.0ͱHTTP/1.1 ͳΒHTTP/1.1Λ༻)
HTTPϝοηʔδ • HTTPϝοηʔδ2छྨଘࡏ͢Δ ‣ HTTPϦΫΤετ Webϒϥβ͔Βͷཁٻ ‣ HTTPϨεϙϯε WebϒϥβͷԠ HTTPϦΫΤετ
HTTPϨεϙϯε
HTTPϝοηʔδ • HTTPϝοηʔδ, ෳߦͷσʔλͰߏ͞ΕΔ ։࢝ߦʢϦΫΤετߦ εςʔλεߦʣ ϝοηʔδϔομʔ ۭߦ ϝοηʔδϘσΟ 1ߦͷΈ
ෳߦՄ 1ߦͷΈ ෳߦՄ ֤߲CR+LFͰ۠ΒΕΔ
HTTPϝοηʔδ • HTTPϝοηʔδ, ෳߦͷσʔλͰߏ͞ΕΔ ։࢝ߦ ϘσΟ https://developer.mozilla.org/ja/docs/Web/HTTP/Messages#HTTP_RequestsΑΓҾ༻ HTTPϦΫΤετͷྫ
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2ͷΓͱΓ
HTTPϦΫΤετ/HTTPϨεϙϯε • HTTPϝοηʔδ2छྨଘࡏ͢Δ ‣ HTTPϦΫΤετ Webϒϥβ͔Βͷཁٻ ‣ HTTPϨεϙϯε WebϒϥβͷԠ HTTPϦΫΤετ
HTTPϨεϙϯε
HTTPϦΫΤετ
HTTPϦΫΤετ • HTTPϦΫΤετ 3ͭͷϝοηʔδͰߏ͞Ε͍ͯΔ 1. ϦΫΤετߦ Webαʔόʹରͯ͠ͲͷΑ͏ͳॲཧΛཁٻ͢Δ͔ 2. ϝοηʔδϔομ Webϒϥβͷछྨόʔδϣϯ,
σʔλܗࣜͳͲ 3. ϝοηʔδϘσΟ ϑΥʔϜʹೖྗ͞ΕͨσʔλͳͲͷσʔλ
HTTPϦΫΤετʢϦΫΤετߦʣ • ϦΫΤετߦ ใΛऔಘ͍ͨ͠, ใΛૹ৴͍ͨ͠ͳͲͷαʔόʹର ͯ͠ͷϦΫΤετΛهड़. ҎԼͷ3ͭΛهࡌ ‣ HTTPϝιου ‣
ϦΫΤετର ‣ HTTPόʔδϣϯ
HTTPϦΫΤετʢϦΫΤετߦʣ • HTTPϝιου ࣮ߦ͢ΔΞΫγϣϯΛද͢ಈࢺ(GET, POST, PUT, etc..) ·ͨ, ໊ࢺ(Head, Option)Λࢦఆ
ॲཧ )551ϝιου $36%ૢ࡞ ొ 1045 $3&"5& औಘ (&5 3&"% ߋ৽ 165 61%"5& আ %&-&5& %&-&5&
HTTPϦΫΤετʢϦΫΤετߦʣ • ϦΫΤετର ϦΫΤετରΛࢦఆ. ௨ৗURLͰࢦఆ͢Δ •
HTTPόʔδϣϯ HTTPͷόʔδϣϯʢͦΕͦ͏ʣ POST / HTTP 1.1 GET /background.png HTTP/1.0 HEAD /test.html?query=alibaba HTTP/1.1 OPTIONS /anypage.html HTTP/1.0 ϓϩτίϧ, ϙʔτ, υϝΠϯϦΫΤετ͔Β໌Β͔ʹ͞ΕΔ
HTTPϦΫΤετ • HTTPϦΫΤετ 3ͭͷϝοηʔδͰߏ͞Ε͍ͯΔ 1. ϦΫΤετߦ Webαʔόʹରͯ͠ͲͷΑ͏ͳॲཧΛཁٻ͢Δ͔ 2. ϝοηʔδϔομ Webϒϥβͷछྨόʔδϣϯ,
σʔλܗࣜͳͲ 3. ϝοηʔδϘσΟ ϑΥʔϜʹೖྗ͞ΕͨσʔλͳͲͷσʔλ
HTTPϦΫΤετʢϝοηʔδϔομʣ • ϝοηʔδϔομ Webϒϥβͷछྨ, σʔλλΠϓ, σʔλͷѹॖํ๏, ༻ݴޠͳͲΛ͑Δ ‣ Ұൠϔομ(General Headers)
ϝοηʔδશମʹద༻͞ΕΔ(Via, Date, ConnectionͳͲ) ‣ ϦΫΤετϔομ(Request Headers) User-Agent, Accept-Type, ࢦఆ͢ΔͱϦΫΤετΛมߋ͢Δͷ(Accept- Language), ঢ়گΛࣔ͢ͷ(Referer), ݅Λ༩͑Δͷ(If-None) ‣ ΤϯςΟςΟϔομ(Entity Headers) ϘσΟʹద༻͞ΕΔ(Content-length), ϘσΟ͕ແ͍߹ΤϯςΟςΟ ϔομՃ͞Εͳ͍
HTTPϦΫΤετʢϝοηʔδϔομʣ • Ұൠϔομ(General Headers) ໊শ ༰ $POOFDUJPO ଓঢ়ଶʹؔ͢Δ௨ʢݱࡏͷτϥ ϯβΫγϣϯ͕ऴྃͨ͋͠ͱίω ΫγϣϯΛอ࣋͢Δ͔Ͳ͏͔ʣ
%BUF )551ϝοηʔδ͕ ࡞͞Εͨ࣌ 6QHSBEF )551ͷόʔδϣϯΛΞοϓσʔτ͢ ΔΑ͏ʹཁٻ
HTTPϦΫΤετʢϝοηʔδϔομʣ • ϦΫΤετϔομ(Request Headers) ໊শ ༰ )PTU ϦΫΤετઌͷαʔό໊ 3FGFSFS લʹ๚Ε͍ͯͨ8FCϖʔδͷ63-
6TFS"HFOU 8FCϒϥβͷݻ༗ใ Host: developer.mozilla.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 Referer: https://developer.mozilla.org/testpage.html ϦΫΤετϔομͷྫ
HTTPϦΫΤετʢϝοηʔδϔομʣ • ΤϯςΟςΟϔομϑΟʔϧυ(Entity Headers) ໊শ ༰ "MMPX ར༻Մೳͳ)551ϝιουҰཡ $POUFOU&ODPEJOH ίϯςϯπͷΤϯίʔυ
$POUFOU-BOHVBHF ίϯςϯπͷ༻ݴޠ $POUFOU-FOHUI ίϯςϯπͷ͞ $POUFOU5ZQF ίϯςϯπͷछྨʢςΩετ ը૾ʣ &YQJSFT ίϯςϯπͷ༗ޮظݶ -BTU.PEJpFE ίϯςϯπͷ࠷ऴߋ৽࣌ࠁ
HTTPϦΫΤετ • HTTPϦΫΤετ 3ͭͷϝοηʔδͰߏ͞Ε͍ͯΔ 1. ϦΫΤετߦ Webαʔόʹରͯ͠ͲͷΑ͏ͳॲཧΛཁٻ͢Δ͔ 2. ϝοηʔδϔομ Webϒϥβͷछྨόʔδϣϯ,
σʔλܗࣜͳͲ 3. ϝοηʔδϘσΟ ϑΥʔϜʹೖྗ͞ΕͨσʔλͳͲͷσʔλ
HTTPϦΫΤετʢϘσΟʣ • ϘσΟ WebαʔόʹૹΔσʔλ. ۭ(empty)ͳ߹͋Δ ‣ GETHEAD, DELETE, OPTIONSͳͲͷ߹, ௨ৗϘ
σΟۭͱͳΔ
HTTPϦΫΤετʢϘσΟʣ • େ͖͘2ͭʹྨ ‣ ୯ҰϦιʔεϘσΟ 1ͭͷϑΝΠϧͰߏ. Content-TypeͱContent- Lengthͷ2छྨͰߏ͞ΕΔ ‣ ෳϦιʔεϘσΟ
ϑΥʔϜͷ༰ʢෳͷσʔλʣΛૹΔΑ͏ͳ࣌ʹ ༻͍ΒΕΔ
HTTPϦΫΤετʢϝοηʔδϔομʣ • HTTPϔομͷྫ https://developer.mozilla.org/ja/docs/Web/HTTP/Messages#HTTP_RequestsΑΓҾ༻ ։࢝ߦ ϘσΟ ۭߦ ۭߦϔομͷऴΘΓΛΒͤΔ
HTTPϨεϙϯε
HTTPϨεϙϯε • HTTPϨεϙϯε 3ͭͷϝοηʔδͰߏ͞Ε͍ͯΔ 1. εςʔλεߦ ΫϥΠΞϯτʹॲཧ݁ՌΛΒͤΔ 2. ϝοηʔδϔομ Webϒϥβͷछྨόʔδϣϯ,
σʔλܗࣜͳͲ 3. ϝοηʔδϘσΟ HTMLը૾ͳͲͷσʔλ
HTTPϨεϙϯεʢεςʔλεߦʣ • ϦΫΤετߦ αʔόͰͷॲཧͷ݁ՌΛ͑Δ. ҎԼͷ3ͭͷใͰ ߏ͞Ε͍ͯΔ 1. ϓϩτίϧόʔδϣϯ 2. εςʔλείʔυ
3. εςʔλεจࣈྻ
HTTPϨεϙϯεʢεςʔλεߦʣ • ϓϩτίϧόʔδϣϯ ௨ৗHTTP/1.1ͱͳΔ • εςʔλείʔυ ϦΫΤετ͕ޭ͔ͨ͠Ͳ͏͔Λฦ͢ εςʔλείʔυ ҙຯ
ϦΫΤετޭ YY ϦμΠϨΫτ ېࢭ͞Ε͍ͯΔ ݟ͔ͭΒͳ͔ͬͨ
HTTPϨεϙϯεʢεςʔλεߦʣ • εςʔλεจࣈྻ εςʔλεΛද͍͢จࣈྻͰ, ਓ͕ؒHTTPϝοηʔ δΛཧղ͢ΔͷΛॿ͚Δ ‣ HTTPϨεϙϯεͷεςʔλεߦҎԼͷΑ͏ʹͳΔ )551/PU'PVOE εςʔλεߦͷྫ
HTTPϨεϙϯε • HTTPϨεϙϯε 3ͭͷϝοηʔδͰߏ͞Ε͍ͯΔ 1. εςʔλεߦ ΫϥΠΞϯτʹॲཧ݁ՌΛΒͤΔ 2. ϝοηʔδϔομ Webϒϥβͷछྨόʔδϣϯ,
σʔλܗࣜͳͲ 3. ϝοηʔδϘσΟ HTMLը૾ͳͲͷσʔλ
HTTPϨεϙϯεʢϝοηʔδϔομʣ • ϝοηʔδϔομ Webϒϥβͷछྨ, σʔλλΠϓ, σʔλͷѹॖํ๏, ༻ݴޠͳͲΛ͑Δ ‣ Ұൠϔομ(General Headers)
ϝοηʔδશମʹద༻͞ΕΔ(ViaͳͲ) ‣ ϦΫΤετϔομ(Request Headers) Vary, Accept-RangesͳͲεςʔλεߦͰΘΒͳ͍αʔόͷՃใΛ Ճ͢Δ ‣ ΤϯςΟςΟϔομ(Entity Headers) ϘσΟʹద༻͞ΕΔ(Content-length), ϘσΟ͕ແ͍߹ΤϯςΟςΟ ϔομՃ͞Εͳ͍
HTTPϨεϙϯε • HTTPϨεϙϯε 3ͭͷϝοηʔδͰߏ͞Ε͍ͯΔ 1. εςʔλεߦ ΫϥΠΞϯτʹॲཧ݁ՌΛΒͤΔ 2. ϝοηʔδϔομ Webϒϥβͷछྨόʔδϣϯ,
σʔλܗࣜͳͲ 3. ϝοηʔδϘσΟ HTMLը૾ͳͲͷσʔλ
HTTPϦΫΤετʢϘσΟʣ • ϘσΟ HTMLը૾ͳͲͷσʔλ ‣ 201204ͱ͍͏Ϩεϙϯείʔυͷ߹, ϘσΟΛ ࣋ͨͳ͍
HTTPϦΫΤετʢϘσΟʣ • େ͖͘3छྨʹྨ͞ΕΔ ‣ αΠζ͕໌͍ͯ͠Δ୯ҰϦιʔεͷϘσΟ 1ͭͷϑΝΠϧͰߏ. Content-TypeͱContent-Lengthͷ2छ ྨͰߏ͞ΕΔ ‣ αΠζ͕ෆ໌ͳ୯ҰϦιʔεͷϘσΟ
σʔλΛνϟϯΫʢմʣʹ͚ͯૹ৴. Transfer-EncodingΛ chunkedʹͯ͠ૹ৴͢Δ ‣ ෳϦιʔεͷϘσΟ ൺֱత·Ε
Webϖʔδ͕දࣔ͞ΕΔྲྀΕ • Ϩεϙϯεϔομͷྫ https://developer.mozilla.org/ja/docs/Web/HTTP/Messages#HTTP_RequestsΑΓҾ༻ ։࢝ߦ ϘσΟ ۭߦ ۭߦϔομͷऴΘΓΛΒͤΔ
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2ͷΓͱΓ
• HTTPϦΫΤετΛ༻͍ͯ۩ମతͳཁٻ༰Λ͍͑ͯ ΔͷHTTPϝιου HTTPϝιου ϝιουͷྫ • GET ίϯςϯπΛऔಘ͍ͨ͠߹ • POST
σʔλΛWebαʔόʹૹ৴͍ͨ͠߹ ଞͷϝιουRESTͷ͋ͨΓͰ͓ͨ͠ͷͱ͔
HTTPϝιου ϝιου໊ આ໌ )&"% )551ϔομʔͷใͷΈΛऔಘ͢Δ σʔλͷߋ৽࣌σʔλαΠζͷΈ ΛΓ͍ͨ߹ʹ༻ (&5 )5.-ϑΝΠϧը૾ͱ͍ͬͨσʔλ Λऔಘ͢Δ߹ʹ༻
1045 ύεϫʔυͷΑ͏ͳσʔλΛૹ৴͢Δ ߹ʹ༻ 165 σʔλΛΞοϓϩʔυ͢ΔͨΊʹ༻ ଓઌͷσʔλΛॻ͖͑Δ VQEBUF ͢Δ͜ͱ͕Մೳ
HTTPϝιου ϝιου໊ આ໌ %&-&5& ࢦఆͨ͠σʔλΛআ͢ΔͨΊʹ༻ 165ͱڞʹ༻੍͕ݶ͞Ε͍ͯΔ߹ ͕ଟ͍ $0//&$5 8FCαʔόʹଓ͢Δ·Ͱʹผͷαʔ όΛதܧ͢Δ߹ʹ༻
015*0/4 ར༻Ͱ͖Δ)551ϝιουΛ͍߹Θ ͤΔͨΊʹར༻͢Δ 53"$& ϒϥβͱαʔόͷܦ࿏ΛνΣοΫ͢ Δ߹ʹ༻͢Δ PUT, DELETE, CONNECT, TRACEѱ༻Λ͙ͨΊ੍ݶ͞Ε͍ͯΔ͜ͱ͕ଟ͍
HTTPϝιου • GETͱPOSTզʑೃછΈͷ͋Δϝιου͕ͩ, ͲͷΑ͏ͳҧ͍ ͕͋Δͷ͔ʁ ‣ GETύϥϝʔλΛURLͷޙΖʹՃ͢Δ ‣ Կ͔ใΛಘΔ࣌ʹ͏͜ͱ͕ଟ͍ ‣
ϒοΫϚʔΫ͕Մೳ ‣ σʔλྔʹ੍ݶΞϦ ‣ POSTύϥϝʔλΛϝοηʔδϘσΟʹؚΊΔ ‣ Կ͔ใΛొ͢Δ࣌ʹ͏͜ͱ͕ଟ͍ ‣ σʔλྔ͕ଟ͍, όΠφϦσʔλΛૹΔ߹ ‣ ύεϫʔυೝূʹΘΕΔ͜ͱ͕ଟ͍ ࢀߟɿhttps://www.w3schools.com/tags/ref_httpmethods.asp
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2ͷΓͱΓ
εςʔλείʔυ • εςʔλείʔυ HTTPϨεϙϯεʹؚ·Ε͍ͯΔ, WebαʔόͰͷॲཧ݁ ՌΛද͢3ܻͷࣈ ‣ ਖ਼ৗऴྃͨ͠߹ͷεςʔλείʔυ200 aiko.comΛݟʹߦͬͨͱ͖ͷεςʔλείʔυ (chromeͷΠϯεϖΫλେมศརͰ͢)
εςʔλείʔυ • εςʔλείʔυͷྨ ‣ 100൪ HTTPϦΫΤετΛॲཧதͰ͋Δ͜ͱΛ௨͢Δ. Webαʔό͕ σʔλड͚ೖΕՄೳ͔ͷ֬ೝͰΘΕΔ ‣ 200൪
HTTPϦΫΤετʹରͯ͠, ਖ਼ৗʹॲཧ͕ऴྃͨ͜͠ͱΛ௨͢Δ ‣ 300൪ సૹॲཧͳͲWebϒϥβଆͰՃͷॲཧ͕ඞཁͰ͋Δ͜ͱΛ ௨͢ΔʢϦμΠϨΫτͳͲʣ
εςʔλείʔυ ൪߸ εςʔλεจࣈྻ ҙຯ $POUJOVF ͦΕ·Ͱͷશͯʹ͕ͳ͍ͨΊ Ϧ ΫΤετΛܧଓͯ͠Α͍
0, ϦΫΤετ͕ਖ਼ৗʹडཧ͞Εͨ .PWFE1BSNBOFOUMZ ίϯςϯπ͕Ҡಈͨ͠ 'PVOE Ұ࣌తʹҠಈʢผͷॴͰൃݟʣ ͞Εͨ /PU.PEJpFE ϦΫΤετ͞Εͨίϯςϯπ͕ະߋ৽ Ͱ͋ΔʢΩϟογϡΛ͏ʣ
εςʔλείʔυ • εςʔλείʔυͷྨ ‣ 400൪ ΫϥΠΞϯτଆͷΤϥʔͰ͋Δ͜ͱΛ௨͢Δ. ࢦఆͨ͠Ϧ ιʔε͕ଘࡏ͠ͳ͍, ݖݶ͕ͳ͍߹ͳͲͰ400൪͕௨ ͞ΕΔ
‣ 500൪ WebαʔόͷΤϥʔΛ௨͢Δ. ߴෛՙͳঢ়ଶͰԠΛฦ͢ ͜ͱ͕Ͱ͖ͳ͍߹, Ұ࣌తʹར༻Ͱ͖ͳ͍߹ʹ500൪ ͕௨͞ΕΔ
εςʔλείʔυ ൪߸ εςʔλεจࣈྻ ҙຯ #BE3FRVFTU ෆਖ਼ͳϦΫΤετ 'PSCJEEFO ΫϥΠΞϯτʹίϯςϯπͷΞΫη
εݖ͕ͳ͍ /PU'PVOE ϦΫΤετ͞Εͨίϯςϯπ͕ະݕग़ Ͱ͋Δ *OUFSOBM4FSWFS&SSPS ϦΫΤετॲཧதʹαʔό෦ͰΤ ϥʔ͕ൃੜͨ͜͠ͱΛΒͤΔ 4FSWJDF6OBWBJMBCMF ΞΫηεूத ϝϯςφϯεͰҰ࣌ తʹར༻ෆՄೳͰ͋Δ͜ͱΛΒͤΔ
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2ͷΓͱΓ
TCPʹΑΔσʔλ௨৴ ૹ৴ࣦഊ ࠶ૹ৴ "$,Λૹ৴ ࠶ૹ੍ޚ ॱং੍ޚ ॱং͕ ೖΕସΘΔ γʔέϯε൪߸Λجʹ σʔλΛΈཱͯ
TCP͕͍ͬͯΔ͜ͱ
TCPʹΑΔσʔλ௨৴ • HTTPͷσʔλͷΓऔΓΛߦͳ͏ͷ, TCP(Transmission Control Protocol)ͷ • TCP௨৴૬खͱͷཧతͳ௨৴࿏Ͱ͋ΔίωΫγϣϯΛཱ֬ͨ͠ ޙ, ௨৴Λ։࢝͢Δ
‣ 3ճͷΓऔΓʢ3ΣΠϋϯυγΣΠΫʣΛߦͬͯίωΫγϣϯ Λཱ֬͢Δ - ΫϥΠΞϯτ͔Βͷଓཁٻ(SYN) - ΫϥΠΞϯτͷ֬ೝԠ, αʔό͔Βͷଓཁٻ(SYN+ACK) - αʔόʹରͯ֬͠ೝԠ(ACK)
TCPʹΑΔσʔλ௨৴ • ΫϥΠΞϯτ͔Βͷଓཁٻ(SYN) ΫϥΠΞϯτ͔Βαʔόʹରͯ͠, ଓΛཁٻ͢ΔͨΊ ͷSYNύέοτΛૹΔ. ‣ TCPϔομͷதʹSYNϑϥάΛཱͯͨͷΛૹΔ
TCPʹΑΔσʔλ௨৴ • ΫϥΠΞϯτͷ֬ೝԠ&αʔό͔Βͷଓཁٻ ΫϥΠΞϯτ͔ΒͷଓཁٻΛड͚ͨαʔό, ʮଓ ཁٻͷγʔέϯε൪߸+1ʯΛACKϑϥάʹ͠, ΫϥΠΞ ϯτ֬ೝԠΛฦ͢. ͦΕͱಉ࣌ʹ, ΫϥΠΞϯτ
ଓཁٻ(SYN)Λ͓͜ͳ͏ ‣ TCPͰ, ௨৴૬ख͔Βͷ֬ೝԠΛड͚औΔ͜ͱͰ, ૹ৴ྃͨ͠ͱΈͳ͢
TCPʹΑΔσʔλ௨৴ • αʔόʹରͯ͠ͷ֬ೝԠ(ACK) αʔό͔ΒΫϥΠΞϯτͷଓཁٻʹରͯ͠, ΫϥΠ Ξϯτଆαʔό͔ΒͷSYNύέοτʹهࡌ͞Εͨγʔ έϯε൪߸+1ΛACKϑϥάͱͯ֬͠ೝԠΛߦ͏
ᶃFIN(Seq:30000) ᶄACK(Ԡ൪߸:30001) ᶆACK(Ԡ൪߸:40001) அཁٻͷૹ৴ அཁٻͷԠ அڐՄͷԠ TCPʹΑΔσʔλ௨৴ ᶃSYN(Seq:10000) ᶄSYN(Seq:20000)+ACK(Ԡ൪߸:10001) ᶅACK(Seq:20001)
ଓཁٻͷૹ৴ ଓڐՄͷԠ ଓڐՄͷԠ ଓཁٻͷૹ৴ σʔλͷૹड৴ ᶅFIN(Seq:40000) அཁٻͷૹ৴ ίωΫγϣϯͷཱ֬ ίωΫγϣϯͷஅ
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2ͷΓͱΓ
HTTP/1.1ͷΓͱΓ • HTTP, HTTP/0.9→HTTP/1.0→HTTP/1.1→HTTP/2ͱ ਐԽ͖ͯͨ͠ ‣ ݱࡏओྲྀͳͷHTTP/1.1 όʔδϣϯ ొ ؆୯ͳઆ໌
)551 ࣌(&5͔͠ແ͔ͬͨ )551 1045ͳͲ (&5Ҏ֎ͷϝιου͕ొ )551 ಉ͡*1ΞυϨεͰҟͳΔυϝΠϯΛ ఏڙ͢Δ)PTUϔομʔͷՃ )551 ετϦʔϜͷՃ
HTTP/1.1ͷΓͱΓ • HTTP/1.11997ॳ಄ʹެ։͞Εͨ • ࠓ·Ͱʹ2վఆ͞Ε͍ͯΔ ‣ 19991݄ʹൃߦ͞ΕͨRFC2616 ‣ 20146݄ʹൃߦ͞ΕͨRFC7230 •
HTTP/1.1ͷओͳಛ࣍ͷ௨Γ ‣ HTTPΩʔϓΞϥΠϒ ‣ HTTPύΠϓϥΠϯ
HTTP/1.1ͷΓͱΓ • HTTPΩʔϓΞϥΠϒ ίωΫγϣϯΛܧଓͯ͠ར༻͢Δ͜ͱ ‣ HTTP/1.0ҎલͰ, HTTPϦΫΤετΛ͢Δͨͼʹί ωΫγϣϯཱ֬Λ͍ͯͨ͠ʢ1௨৴ͨ͠Βͦͷͨͼ ʹίωΫγϣϯΛΫϩʔζ͍ͯͨ͠ʣ ‣
ඇৗʹޮ͕ѱ͍
HTTP/1.1ͷΓͱΓ • HTTPΩʔϓΞϥΠϒ ͦͷͨΊ, HTTP/1.1Ҏ߱ͰίωΫγϣϯΛܧଓͯ͠ར༻͢Δ͜ͱ͕Մ ೳʹͳͬͨ. ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ίωΫγϣϯஅ
ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ίωΫγϣϯஅ ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε ίωΫγϣϯஅ ඇHTTPΩʔϓΞϥΠϒ HTTPΩʔϓΞϥΠϒ
HTTP/1.1ͷΓͱΓ • HTTPύΠϓϥΠϯ ‣ HTTP, ௨ৗHTTPϨεϙϯεΛड͚औͬͨ͋ͱ࣍ͷ ϦΫΤετΛൃߦ͢Δ ‣ ωοτϫʔΫͷঢ়ଶʹΑͬͯ, ஶ͍͠Ԇ͕ൃੜ
→ HTTPϨεϙϯεΛͭ͜ͱແ͘, ෳͷHTTPϦΫ ΤετΛૹ৴͢Δ͜ͱΛՄೳʹ͢ΔػೳΛHTTPύ ΠϓϥΠϯͱ͍͏
HTTP/1.1ͷΓͱΓ • HTTPύΠϓϥΠϯ ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε ίωΫγϣϯஅ ίωΫγϣϯཱ֬
ίωΫγϣϯஅ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε ϨεϙϯεΛͨͣʹ ϦΫΤετΛૹ৴͢Δ HTTP/1.0Ҏલ HTTP/1.1Ҏ߱ ࣌ؒॖ
࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.
TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷΓͱΓ 7. HTTP/2ͷΓͱΓ
HTTP/2ͷΓͱΓ • ࣌ͱڞʹWebϖʔδෳࡶԽ͍͖ͯ͠, ը૾αΠζ εΫϦϓταΠζ͕େ͖͘ͳ͍ͬͯͬͨ • HTTP/1.1ͰύΠϓϥΠϯػೳ͕Ճ͞Ε, ଟ͘ͷσʔλ Λޮతʹసૹ͢Δ͜ͱ͕Մೳʹͳͬͨͷͷ, ύΠϓ
ϥΠϯػೳେ͖ͳΦʔόʔϔουʹͳΔ ‣ ৽ͨͳόʔδϣϯͰ͋ΔHTTP/2͕ఏҊ͞Εͨ
HTTP/2ͷΓͱΓ • HTTP/2 Googleͷ։ൃͨ͠, ௨৴ͷߴԽΛతͱ࣮ͨ͠ݧతͳ ϓϩτίϧSPDYͱ͍͏ϓϩτίϧΛϕʔεʹ࡞ͨ͠ϓ ϩτίϧ. 2015ͷ5݄ʹਖ਼ࣜͳඪ४Խ͕ͳ͞Εͨ • ࣍ͷΑ͏ͳಛ͕͋Δ
‣ ετϦʔϜʹΑΔଟॏԽ ‣ όΠφϦܗࣜͰૹΔ͜ͱͰߋͳΔ࠷దԽ͕Մೳ ‣ ϔομʔͷѹॖ ‣ αʔόϓογϡ
HTTP/2ͷΓͱΓʢετϦʔϜʹΑΔଟॏԽʣ • ετϦʔϜʹΑΔଟॏԽ ‣ HTTP/1.0Ҏલ HTTPϦΫΤετ, HTTPϨεϙϯεΛͬͨޙʹૹ৴ ՄೳͱͳΔ ‣ HTTP/1.1
ύΠϓϥΠϯʹΑΓ, ಉ࣌ʹෳͷϦΫΤετΛૹ৴͢ Δ͜ͱ͕Մೳʹͳͬͨ → ʮHTTPϦΫΤετͷॱ൪ͰϨεϙϯεΛฦ͢ʯͱ͍ ͏੍͕͍͍ͭͯͨ
HTTP/2ͷΓͱΓʢετϦʔϜʹΑΔଟॏԽʣ • Webϒϥβ͔ΒෳͷϦΫΤετ͕ඈΜͰ͖ͯ, ͋ Δ1ͭͷHTTPϨεϙϯεͷॲཧʹ͕͔͔࣌ؒΔ߹, શ ͯͷϨεϙϯελΠϜ͕૿Ճ͢Δͱ͍͏͕͋ͬͨ ‣ ͜ͷΛղܾ͢ΔͨΊ, 1ͭͷଓ্ʹετϦʔϜ
ͱݺΕΔԾతͳํγʔέϯεΛ࡞ͬͯରࡦ
HTTP/2ͷΓͱΓʢετϦʔϜʹΑΔଟॏԽʣ HTTP/2ଓʢ1ίωΫγϣϯʣ ετϦʔϜᶃ ετϦʔϜᶄ ετϦʔϜᶅ ετϦʔϜᶆ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε
ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε
HTTP/2ͷΓͱΓʢετϦʔϜʹΑΔଟॏԽʣ ϦΫΤετᶃ Ϩεϙϯεᶃ Ϩεϙϯεᶄ HTTPύΠϓϥΠϯ ετϦʔϜʹΑΔଟॏԽ ࣌ؒॖ ϦΫΤετᶄ ϦΫΤετᶅ ॲཧͪ
Ϩεϙϯεᶅ ϦΫΤετᶃ ϦΫΤετᶄ ϦΫΤετᶅ Ϩεϙϯεᶃ Ϩεϙϯεᶄ Ϩεϙϯεᶅ ϦΫΤετͷॱ൪Ͱ ϨεϙϯεΛฦ͢ඞཁ͋Γ ετϦʔϜ͕ҟͳΕ Ϩεϙϯεͷॱ൪ ੍ݶ͞Εͳ͍
༻ૉࡐ, ࢀߟϦϯΫ
༻ૉࡐ, ࢀߟϦϯΫ • ͍Β͢ͱ • k-tamura/cocha-icons https://github.com/k-tamura/cocha-icons • HTTPϝοηʔδ https://developer.mozilla.org/ja/docs/Web/HTTP/
Messages • HTTP Ϩεϙϯεεςʔλείʔυ https://developer.mozilla.org/ja/docs/Web/HTTP/ Status
༻ૉࡐ, ࢀߟϦϯΫ • ʮεϦʔΣΠϋϯυγΣΠΫʯͷखॱɺΘ͔͍ͬͯ· ͔͢ʁ http://ascii.jp/elem/000/000/619/619702/ • HTTP/2ೖ https://techblog.yahoo.co.jp/infrastructure/http2/ introduction_to_http2/