Share
Embed
Transcript
144 slides
-
લ Agenda • ϒϥβͷػೳ • ϒϥβͷΈ • ϨϯμϦϯάΤϯδϯ • JavaScript
Τϯδϯ • ωοτϫʔΫ • σʔλετϨʔδ -
ϒϥβͷػೳ • ΞυϨεόʔʹ͍Εͨ URL Λجʹϖʔδ͕ϨϯμϦϯά͞ΕΔ • ϦϯΫΛΫϦοΫ͢ΔͳͲͷΞΫγϣϯ͕͋Δͱ URL ͕มԽ ͠ɺཤྺʹͨ·Δ
• ΔϘλϯΛԡ͢ͱཤྺΛΕΔ • ਐΉϘλϯΛԡ͢ͱཤྺΛਐΊΒΕΔ • ϦϩʔυϘλϯΛԡ͢ͱ࠶ URL Λߋ৽͢Δ *NBHF -
ϒϥβͷػೳ • ϒϥβͷجຊػೳΛյ͢Α͏ͳΞϓϦέʔγϣϯମݧ͕ѱ ͍ɻ • ͬͨ࣌ʹͱͱ͍ͨεΫϩʔϧҐஔ͡Όͳ͍ॴʹ͞Ε ͨΒɾɾɾɾʁ • εΫϩʔϧ͢ΔࡍʹΨλΨλͯ͠εϜʔεͳૢ࡞͕ग़དྷͳ͔ͬ ͨΒɾɾʁ
• Enter ΩʔͰૹ৴Ͱ͖ͳ͍ϑΥʔϜΛ࡞ͬͯ͠·ͬͨ Βɾɾɾʁ -
ϒϥβͷػೳ • ϒϥβͷجຊػೳΛյ͢Α͏ͳΞϓϦέʔγϣϯମݧ͕ѱ ͍ɻ • ͬͨ࣌ʹͱͱ͍ͨεΫϩʔϧҐஔ͡Όͳ͍ॴʹ͞Ε ͨΒɾɾɾɾʁ • εΫϩʔϧ͢ΔࡍʹΨλΨλͯ͠εϜʔεͳૢ࡞͕ग़དྷͳ͔ͬ ͨΒɾɾʁ
• Enter ΩʔͰૹ৴Ͱ͖ͳ͍ϑΥʔϜΛ࡞ͬͯ͠·ͬͨ Βɾɾɾʁ શ෦ѱ͍ϢʔβʔΤΫεϖϦΤϯε -
ϒϥβͷػೳ • େݪଇ: ΣϒΞϓϦέʔγϣϯϒϥβͷػೳΛ յ͍͚ͯ͠ͳ͍ɻ • յ͢ͱମݧ͕ѱ͍͚ͩ͡Όͳ͍ɻ • ΞΫηγϏϦςΟѱ͘ͳΔɻ •
ηΩϡϦςΟͱ͔ͷอޢػߏಇ͔ͳ͘ͳΔ͔ɻ -
ϒϥβͷػೳ • େݪଇ: ΣϒΞϓϦέʔγϣϯϒϥβͷػೳΛ յ͍͚ͯ͠ͳ͍ɻ • յ͢ͱମݧ͕ѱ͍͚ͩ͡Όͳ͍ɻ • ΞΫηγϏϦςΟѱ͘ͳΔɻ •
ηΩϡϦςΟͱ͔ͷอޢػߏಇ͔ͳ͘ͳΔ͔ɻ ͲΜͳʹྑ͍ΞϓϦͰ͋ͬͯ ϒϥβͷػೳΛյ͢Α͏ͳΞϓϦΘΕͳ͘ͳΔ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH &OHJOF /FUXPSL +BWB4DSJQU &OHJOF %BUB 4UPSBHF
ϒϥβͷΠϯλϑΣʔε ΞυϨεόʔͱ͔ΔϘλϯͱ͔ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH &OHJOF /FUXPSL +BWB4DSJQU &OHJOF %BUB 4UPSBHF
ϒϥβͷ֩ ޙͰհ͢Δ༷ʑͳߏཁૉͱௐఀ͢Δ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH &OHJOF /FUXPSL +BWB4DSJQU &OHJOF %BUB 4UPSBHF
ίϯςϯπͷඳըΛߦ͏ɻίϯςϯπ͕ )5.-ͳΒϖʔδΛύʔεͯ͠ϩʔυ͢Δ -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH &OHJOF /FUXPSL +BWB4DSJQU &OHJOF %BUB 4UPSBHF
ωοτϫʔΫɺ)551ϦΫΤετͨ͠ Γɺ)5514ͰϦΫΤετͨ͠Γ -
ϒϥβͷߏ • ωοτϫʔΫ • HTML CSS JavaScript ͱ͍ͬͨίϯςϯπΛμϯϩʔυͨ͠ΓɺΞο
ϓϩʔυ͢ΔΈ • ϒϥβͷσʔλަͷΈʮσʔλͷཁٻʢϦΫΤετʣʯͱʮཁٻ ʹରͯ͠ͷԠʢϨεϙϯεʣʯͱ͍͏̎ͭͷγϯϓϧͳΓऔΓʹΑͬͯ ߦΘΕ͍ͯΔ • -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH &OHJOF /FUXPSL +BWB4DSJQU &OHJOF %BUB 4UPSBHF
+BWB4DSJQU࣮ߦΤϯδϯWͱ͔ 4QJEFS.POLFZͱ͔+4$ͱ͔ -
ϒϥβͷߏ • JavaScript Τϯδϯ • JavaScript ίϯςϯπΛಈతʹมߋ͢Δͱ͍ͬͨඇৗʹॏཁͳॲཧΛߦ ͏෦ • ʮJust
In Time ίϯύΠϥʯͱݺΕΔಈతʹίʔυΛղੳ͢ΔࣄͰੑೳ Λิ͍ͬͯΔ • -
ϒϥβͷߏ 6TFS*OUFSGBDF #SPXTFS&OHJOF 3FOEFSJOH &OHJOF /FUXPSL +BWB4DSJQU &OHJOF %BUB 4UPSBHF
σΟεΫʹอଘ͢ΔϨΠϠ $PPLJFͱ͔MPDBMTUPSBHFͱ͔͕֘ -
ϒϥβͷߏ • σʔλετϨʔδ • σʔλΛӬଓతʹอଘ͢Δ෦ • ࣮ history cookie
localstorage શ෦ σʔλετϨʔδ෦ʹอଘ͞Ε͍ͯΔ -
ϒϥβͷߏ • ͜ͷϚοϓΛུ֓ͱͯ͠಄ʹೖΕ͓͍ͯͯ΄͍͠ɻ • HTML/CSSΛ࣮ߦͯ͠Δॴ͕Ͳ͔͜ • JavaScript Engine͕͔ΕͯΔͱ͔ • ωοτϫʔΫ෦ͰσʔλΛ͖͍࣋ͬͯͯΔͱ͔
• Cookie ͷσʔλΛอଘͯ͠ΔͷσʔλετϨʔδͱ͔ -
1990: ϒϥβઓ૪ • จॻͷ༰ͱ০Λ͚ͯఆٛͰ͖ΔΑ͏ʹ͠Α͏ͱ͍͏ ํʹͳ͍ͬͯ͘ɻ • ࠷ॳظͷϒϥβ༰ͱ০ผΕͯͳ͔ͬͨɻ • CSS ͕ੜ͠ɺ༷͕ਐΜͰ͍͘Α͏ʹͳΔɻ
• ͜ͷࠒ͔Β HTML / CSS ͷଘࡏ͕Ͱ͖Δɻ -
1990: ϒϥβઓ૪ • ϏοάΧϯύχʔ͍ͬͯͳ͍ɻ • IBM͕ WebExplorer Λ։ൃ͠ɺͦͷޙ Microsoft ͕
Internet Explorer Λ։ൃ͢Δɻ • Mosaic NetScape ձࣾΛ্ཱͪ͛ɺ Navigator ͱ͍͏໊ લͰ։ൃ͢Δɻ • ୈҰ࣍ϒϥβઓ૪͕ຄൃ͢Δɻ -
1990: ϒϥβઓ૪ • JavaScript ͜ͷࠒ͔Β։ൃ͞Εͩ͢ʢ1995ʣ • HTTP Cookie ͳͲͷΈ։ൃ͞ΕΔ •
HTTPS ͳͲͷ҉߸ԽͷΈ͜ͷࠒ͔Β • -
1990: ϒϥβઓ૪ • ػೳͷ֦ॆ͕ਐΜͰ͍͘ҰํͰϒϥβઓ૪൵ܶͨΒͨ͠ɻ • աܹͳࠩผԽͱػೳ֦ॆ͕ਐΉதͰಠ֦ࣗுʹ͠Δ͜ͱ૿͑ͯ ͍͘ • JScript ͱݺΕΔ΄ͱΜͲ
JavaScript ͱಉ͡Α͏ͳػೳΛ࣋ͬͨ εΫϦϓτݴޠ͕ Internet Explorer ʹ࣮͞ΕΔ • JavaScript Ͱ Style ΛܾΊΒΕΔ JavaScript Style Sheet ఏҊ͞ ΕΔ͕ɺ༷ܾΊ͖Εͳ͍͏ͪʹऴΘΔͳͲɻ -
1990: ϒϥβઓ૪ • ࠷ऴతʹୈҰ࣍ϒϥβઓ૪ϚΠΫϩιϑτ͕উར͢Δ • OSʹϒϥβ͕ಉࠝ͞ΕΔࣄͰ NetScape ͷϒϥβΑΓ ϢʔβʔΛ৳͠ɺՉঢ়ଶ͕࡞ΒΕͯ͠·͏ɻ •
NetScape ଆϢʔβʔͷ֫ಘʹࣦഊͨ͠ͷͷɺ OSS Խͯ͠ϒϥβͷٕज़Λޙੈʹ͠ɺ Mozilla ͱ͍͏ اۀʹܗΛม͑ͯଘଓ͢Δ -
2000: Google Chrome ͷ ొɺεϚʔτϑΥϯͷొ • Mozilla ͕ຬΛ࣋ͯ͠ FireFox Λ։ൃͯ͠ɺϦϦʔε͢Δɻ
• ࠓ·Ͱ Internet Explorer Ұڧঢ়ଶ͕ͩͬͨɺ༷ʹ࣮Ͱ͋Γɺߴʹಈ͖ɺ λϒػೳ֦ுػೳΛඋ͑ͨ FireFox ͕ϢʔβʔΛൈ͘ • 2000ޙʹͳΔͱϓϨΠϠʔ͕มΘΔɻ • ·ͣ Google ͕ JavaScript ͱಈతͳ HTTP ϦΫΤετʢ͍ΘΏΔ Ajaxʣ ΛΈ ߹ΘͤΔࣄͰ͜Ε·ͰͷHTMLɺ CSSɺ JavaScript ͱ͍͏ٕज़͚ͩͰΠϯλϥΫ ςΟϒͳΞϓϦέʔγϣϯΛΣϒ্Ͱ࡞ΕΔ͜ͱΛ࣮ફ͢Δɻ • ࣍ʹ Google ͕ Chrome ΛϦϦʔε͢Δɻ -
2000: Google Chrome ͷ ొɺεϚʔτϑΥϯͷొ • 2000ͷલ͔Βޙʹ͔͚ͯى͖ͨͷɺΣϒ্ͰΠϯλϥ ΫςΟϒͳΞϓϦέʔγϣϯΛ࡞Δͱ͍͏ٕज़తͳύϥμΠϜγϑτ • ϒϥβ্Ͱ
JavaScript Λத৺ʹΞϓϦέʔγϣϯΛ࡞Δػձ͕૿͑ ͨɻ • ݁Ռͱͯ͠ɺΞϓϦέʔγϣϯͷ࣮ߦʹ݁͢Δ JavaScript ͷ࣮ ߦڥʹݟ͕͠ೖΔɻ • ֤ϒϥβͷJavaScript Engineʹ Just-in-time (JIT) Compiler ͱݺ ΕΔ࣮ߦதʹ࠷దԽ͢Δػೳ͕ಋೖ͞Ε͍ͯ͘ -
2010: HTML5ϒʔϜͱε ϚʔτϑΥϯωΠςΟϒΞϓϦ • 2010͔ΒΞϓϦέʔγϣϯΛΣϒͰΑΓޮ తʹɺ৽͘͠࡞Ζ͏ͱ͢ΔϒʔϜ͕౸དྷͨ͠ɻ • ϒϥβʹεϚʔτϑΥϯͰݟΕΔΞϓϦέʔ γϣϯΛ࡞ΔྲྀΕ͕౸དྷͨ͠ɻ •
͜ͷ͋ͨΓ͔ΒωΠςΟϒΞϓϦͱϒϥβ྆ํ Ͱಉ͡Α͏ͳػೳΛఏڙ͢ΔΑ͏ʹͳΔ -
2010: HTML5ϒʔϜͱε ϚʔτϑΥϯωΠςΟϒΞϓϦ • ΞϓϦέʔγϣϯͷ࡞Γํ͕ωΠςΟϒΞϓϦͷ࡞Γํʹۙ͘ͳͬͯ ͍ͬͨɻ • ΫϥΠΞϯτͰ LocalStroage
Session Stroage ͱ͍ͬͨΫϥΠΞ ϯτͷετϨʔδΛ͓͏ͱͨ͠ΓɺΦϑϥΠϯͰಈ࡞͢ΔΑ͏ʹ ϒϥβ͕ਐԽ͍ͯͬͨ͠ɻ • ͜ͷࠒʹ Network ʹਐԽ͕๚ΕΔɻϒϥβ͕ར༻͢Δίϯςϯπ ͕ΑΓϦονʹͳΓɺΞϓϦέʔγϣϯͰ͖Δ͜ͱ͕૿͍͑ͯ͘ͱɺ ωοτϫʔΫͷར༻্͕͕͍ͬͯ͘ • HTTP/2 ͱ͍ͬͨޮతʹϦΫΤετ͢Δํ๏͕ग़ͯ͘Δɻ -
HistoryΛյ͍͚ͯ͠ͳ͍ • ϒϥβͷػೳʹʮΔʯͱʮਐΉʯͱ͍ͬͨӾཡཤྺΛલʹ ͠ɺਐΊΔػೳ͕͋Δɻ • ӾཡཤྺཤྺͰ͋ΓɺΔΛԡͨ͠ͱ͖ʹجຊతʹલͷঢ়ଶ ʹΔ͜ͱ͕·͍͠ɻ • ͔͠͠ͳ͕Βɺ͍͔ͭ͘ͷΣϒΞϓϦέʔγϣϯͰɺʮ ΔʯΛԡͨ࣌͠ʹΕͳ͍ΞϓϦέʔγϣϯ͕ଘࡏ͢Δɻ
• ͘͠Ζ͏ͱͨ࣌͠ʹҰ෦ͷঢ়ଶ͚ͩ͢͜ͱ͕Ͱ͖Δ͕ɺ શʹલͷঢ়ଶΛ࠶ݱͰ͖ͳ͍ΞϓϦέʔγϣϯଘࡏ͢Δɻ -
ϨϯμϦϯάΤϯδϯ • ࢦఆ͞ΕͨίϯςϯπΛඳը͢Δͷ • ͜͜Ͱओʹ HTML Λඳը͢Δ࣌ͷྲྀΕͰղ આ͢Δ͕ɺຊདྷ HTML ʹґΒͣɺίϯςϯ
πΛඳը͢Δɻ (SBQIJD *OUFSGBDF 3FOEFS -
ϨϯμϦϯάΤϯδϯ • ࢦఆ͞ΕͨίϯςϯπΛඳը͢Δͷ • ͜͜Ͱओʹ HTML Λඳը͢Δ࣌ͷྲྀΕͰղ આ͢Δ͕ɺຊདྷ HTML ʹґΒͣɺίϯςϯ
πΛඳը͢Δɻ (SBQIJD *OUFSGBDF 3FOEFS ಛʹ͜͜ΛਂງΓ͢Δ -
ϨϯμϦϯάϓϩηε • HTML ͷϨϯμϦϯά "ಈతʹ" ϨϯμϦϯ ά͢Δɻ • JavaScript ϢʔβʔೖྗɺΞχϝʔγϣϯ
ͳͲͰϨϯμϦϯά͕ߋ৽͞ΕΔɻ *OJUJBM3FOEFS ߋ৽ ߋ৽ ߋ৽ ߋ৽ -
ϨϯμϦϯάϓϩηε • ίϯςϯπ͕ಈతʹߋ৽͞ΕΔͱ͍͏͜ͱ͕ Σϒͷಛ • ͦͷͨΊʹ͍͔ͭ͘ͷதؒදݱΛ͍࣋ͬͯΔ IUNM IUNM %0. 4UZMFE
1BSTF 4UZMF -BZPVU 1BJOU -
HTML Parse EJW QIFMMPQ QXPSMEQ EJW 1BSTF %*7 1 5&95
1 5SFF %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 • λάΛωετͯ͠දݱ • ߏͱ͍͏ܗͰσʔλߏͱͯ͠ දݱ͞ΕΔɻ -
DOM %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 •
Document Object Model • ϒϥβͰͷHTMLͷ෦දݱ • Ͱ͋Γɺ͔ͭ JavaScript Ͱૢ࡞Ͱ͖Δσʔλߏ var div = document.body.firstChild; var p2 = div.childNodes[1]; p2.appendChild(document.createElement("span")); +BWB4DSJQU &OHJOF CJOEJOHT -
Style • DOM Λ࡞ͬͨΒͦΕʹ Style Λ ͍ͯͯ͘ • %PDVNFOU )5.-
#PEZ %JW 1 5&95 1 5&95 p { color: red } IFMMP XPSME 4UZMF -
Style • ηϨΫλ • ελΠϧΛͯΔࡍͷతͳϧʔϧΛهड़ ͯ͠༰ΛؚΊͨͷ p { color: red;
} #test { border: red 2px solid; } .foo { background-color: skyblue; } -
Style • CSS (Cascading Style Sheets) • ηϨΫλΛෳࡶʹࢦఆͰ͖Δ ͪͳΈʹෳࡶͳࢦఆΛ͢Ε͢Δ΄Ͳෳࡶͳܭࢉ͕ඞཁͳͷͰ͍ɻ •
ηϨΫλඃΔ͜ͱ͕͋Δ • ඃͬͨΒৄࡉͰܾ·Δ EJWOPU GPP QOUIPGUZQF O \ DPMPSSFE ^ Q\ DPMPSCMVF ^ -
Style • ηϨΫλϚονϯά • ֤ཁૉͷCSSͷηϨΫλΛҰͭҰͭݟ͍ͯͬͯελΠϧΛө͢Δ • Πϝʔδͱͯ͠ΞϯέʔτೖྗϑΥʔϜʹ͍ۙ • .BSHJO 'POU
$PMPS 1BEEJOH ✔ ✔ 255,255,255,0 top: 20px left: ✔family: serif bottom: style: size: top: left: bottom: -
Style • CSS ৄࡉ (ڧ͍ॱͷྫ) • styleଐੑͰͷࢦఆ • ηϨΫλͷ ID
ͷ • ηϨΫλͷଐੑͷ • ηϨΫλͷཁૉ໊ͷ \^ BCDETQFDJpDJUZ MJ\^ BCDETQFDJpDJUZ MJpSTUMJOF\^ BCDETQFDJpDJUZ VMMJ\^ BCDETQFDJpDJUZ VMPM MJ\^ BCDETQFDJpDJUZ I <SFMVQ>\^ BCDETQFDJpDJUZ VMPMMJSFE\^ BCDETQFDJpDJUZ MJSFEMFWFM\^ BCDETQFDJpDJUZ YZ\^ BCDETQFDJpDJUZ TUZMF BCDETQFDJpDJUZ http://taligarsiel.com/Projects/howbrowserswork1.htm#Specifity -
Style • ΧεέʔσΟϯά • ΞϯέʔτೖྗϑΥʔϜͷதͰۭཝΛݟ͚ͭͯิ͏ॲཧ • ͷཁૉ͕͍࣋ͬͯͨΒࢠʹద༻͍ͯ͘͠ • .BSHJO 'POU
$PMPS 1BEEJOH ✔ ✔ 255,255,255,0 top: 20px left: ✔family: serif bottom: style: size: top: left: bottom: ຒ·ͬͯͳ͍ͱ͜ΖΛνΣοΫ .BSHJO 'POU $PMPS 1BEEJOH ✔ ✔ 255,255,255,0 top: 20px left: 20px ✔family: serif bottom: 30px style: normal size: 10 top: 20px left: 20px bottom: 20px ✔ ✔ ✔ ✔ ✔ ✔ ✔ ͔ΒΒ͑Δͱ͜ΖआΓͯ͘Δ -
Style EJWOPU GPP QOUIPGUZQF O \ DPMPSSFE ^ Q\ DPMPSCMVF
^ 1BSTF3VMF 4UZMF3VMFT 4UZMF3VMFT 4UZMF3VMFT $44ύʔε͠ɺελΠϧͷϧʔϧηοτΛ࡞Δɻ -
Style %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 4UZMF3VMFT
4UZMF3VMFT 4UZMF3VMFT %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT -
Style %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 4UZMF3VMFT
4UZMF3VMFT 4UZMF3VMFT %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT ϧʔϧΛ%0.ʹద༻ͯ͠$PNQVUFE4UZMFΛ࡞Δ -
Style %PDVNFOU )5.- #PEZ %JW 1 5&95 1 5&95 $PNQVUFE4UZMFT
$PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMFT $PNQVUFE4UZMF\ GPOU8FJHIU NBSHJO-FGU PVUMJOF USBOTGPSN CBDLHSPVOE ^ ϑΥϯτഎܠͳͲͷελΠϧใΛ%0.ʹ༩͢Δ -
Layout • ҰͭҰͭͷཁૉελΠϧΛ͍ͬͯͯɺͦ Ε͕Ͳ͜ʹஔ͞ΕΔ͔ɺͲΕ͘Β͍ͷαΠζ ͳͷ͔ɺͱ͍͏ॴͷใ͍࣋ͬͯͳ͍ɻ • HTMLͷߏͱ Style ͷใΛجʹॴͱαΠζ Λܭࢉ͢Δॲཧ͕
Layout • ͔Β࠶ؼతʹḷͬͯ Layout ॲཧΛߦ͏ -
Layout • ͔ΒࢠͲʹ࠶ؼతʹܭࢉΛ ͍ͯ͘͠ • ࢠͲͷߴ͞ɾ෯Λܭࢉͨ͠Β ࢠͲͷྦྷੵ͞Εͨߴ͞ɾ ෯ͱࣗࣗͷߴ͞ɾ෯ʹϚʔ δϯΛՃ͑ͯߴ͞Λܭࢉ͢Δ %PDVNFOU
)5.- #PEZ %JW 1 5&95 1 5&95 ߴ͞ɾ෯Λܭࢉ -
Paint • DOMͷཁૉͷॱ൪Ͱͳ͘ɺ z-index Λ ͬͯޙΖͷཁૉͱલͷཁૉΛೖΕସ͑Δ͜ ͱ͕Ͱ͖Δɻ <div class="yellow"></div> <div
class="green"></div> <style> .yellow { z-index: 2; ... } .green { z-index: 1; ... } </style> -
ಈతͳߋ৽ )5.- %0. 4UZMF -BZPVU EPDVNFOUXSJUF EPDVNFOUHFU&MFNFOU#Z*E FMFNUFYU$POUFOU EPDVNFOUXSJUFࣗײతͰศར͕ͩɺ࣮)5.-͔Βࠩ
͠ସ͑ͯ͠·͏ɺͦͷͨΊɺࠓ·Ͱͷ%0.4UZMF -BZPVUͷྲྀΕ͕Γ͠ʹͳΔɻ͏͖Ͱͳ͍ɻ -
ϨϯμϦϯάΤϯδϯ·ͱΊ • HTMLಈతʹߋ৽͞ΕΔϞσϧ • ಈతʹߋ৽͢ΔͨΊʹதؒදݱͱͯ͠ DOM Λ༻ҙ͓ͯ͠Γɺ JavaScript Ͱߋ৽Ͱ͖Δ •
DOMʹมͨ͠ޙɺ Style Λܭࢉ͠ɺͦͷޙͲͷϙδγϣϯʹཁૉ Λஔ͔͘ͱ͍͏ Layout Λܭࢉ͢Δ • ࠷ޙʹ Paint Ͱલ໘ʹஔ͔͘എ໘ʹஔ͔͘ΛܾΊͯඳը͢Δ • document.write Θͳ͍ -
JavaScript Τϯδϯ • JavaScript Λ࣮ߦ͢ΔΤϯδϯ • ࠷ۙͷΤϯδϯେମ Just In Time
ίϯύΠϥ͕͍ͭ ͓ͯΓɺ୯ͳΔΠϯλϓϦλͰͳ͘ɺ౷ܭతʹঢ়گ ΛݟͯߴԽ͞ΕΔ • ͜͜Ͱུ֓Λղઆ͠ɺΤϯδϯͷؾ࣋ͪΛΔɻ • ͪͳΈʹใ͕ଟ͍ v8 ͷΤϯδϯΛࢀߟʹ͍ͯ͠Δɻ -
JavaScript Τϯδϯ GVODUJPOTVN B C \ SFUVSOB C ^ TVN
<GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > UPLFOJ[F "45 <GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > 1SPHSBN 'VODUJPO%FDMBSBUJPO *EFOUJpFSTVN QBSBNT *EFOUJpFSC *EFOUJpFSB -
JavaScript Τϯδϯ GVODUJPOTVN B C \ SFUVSOB C ^ TVN
<GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > UPLFOJ[F "45 <GVODUJPO LFZXPSE > <TVN JEFOUJpFS > < QBSFO > <B JEFOUJpFS > <C JEFOUJpFS > 1SPHSBN 'VODUJPO%FDMBSBUJPO *EFOUJpFSTVN QBSBNT *EFOUJpFSC *EFOUJpFSB +BWB4DSJQU͜Ε·Ͱͱಉ༷ߏͰද͞ΕΔɻ "CTUSBDU4ZOUBY5SFFͱ͍͏ߏɻ -
ΠϯλʔϓϦλ 1SPHSBN 'VODUJPO%FDMBSBUJPO *EFOUJpFSTVN QBSBNT *EFOUJpFSC *EFOUJpFSB *OUFSQSFUFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS
4YDBBFDC!G-EB/BNFE1SPQFSUZS <> <> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS 4YDBBFDE!C-EB;FSP &YDBBFDEB!CC5FTU-FTT5IBO0S&RVBMB <> YDBBFDEE!B+VNQ*G'BMTF<> YDBBFDF! 4YDBBFDEG!C-EB;FSP YDBBFDF!4UBSB YDBBFDF!C+VNQ<> YDBBFDG! 4YDBBFDF!GC-EBSS &YDBBFDF!DD5FTU(SFBUFS5IBO0S&RVBMB <> YDBBFDF!B+VNQ*G'BMTF<> YDBBFDFF! "45͔ΒCZUFDPEFʹ্ͨ͠Ͱ࣮ߦ͢Δɻ 3FTVMU -
Just In Time ίϯύΠϥ *OUFSQSFUFS +*5$PNQJMFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS 4YDBBFDC!G-EB/BNFE1SPQFSUZS <>
<> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE ! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS bytecode Optimized machine code Optimize Deoptimize -
Just In Time ίϯύΠϥ *OUFSQSFUFS +*5$PNQJMFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS 4YDBBFDC!G-EB/BNFE1SPQFSUZS <>
<> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE ! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS bytecode Optimized machine code Optimize Deoptimize *OUFSQSFUFSͷ࣮ߦ࣌ใΛجʹ+*5$PNQJMFSͰ࠷దԽ͢Δ -
Just In Time ίϯύΠϥ *OUFSQSFUFS +*5$PNQJMFS &YDBBFDBF!$SFBUF6ONBQQFE"SHVNFOUT YDBBFDBG!G4UBSS 4YDBBFDC!G-EB/BNFE1SPQFSUZS <>
<> YDBBFDC!G4UBSS YDBBFDC!C-EB;FSP &YDBBFDC!G5FTU&RVBM4USJDUS <> YDBBFDCC!B+VNQ*G'BMTF<> YDBBFDE ! 4YDBBFDCE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDD!G4UBSS YDBBFDD!C-EB;FSP YDBBFDD!G4UBSS &YDBBFDD!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDDB!G4UBSS &YDBBFDDD!BGGG$BMM1SPQFSUZS UIJT S S <> 4YDBBFDE!BB3FUVSO 4YDBBFDE!-EB/BNFE1SPQFSUZUIJT <> <> YDBBFDE!GC4UBSS bytecode Optimized machine code Optimize Deoptimize ͠ਪఆ͕֎Ε͍ͯͨΒඇ࠷దԽ͕Δɻ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ ͜Ε͕+VTU*O5JNFίϯύΠϥͰݴ͏ͱ͜Ζͷ࠷దԽॲཧ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ GVODUJPOTVN B C \ SFUVSOB C ^ ͍͖ͳΓ͜͜ͰจࣈྻΛ͢ TVN ࠷దԽ͞ΕͨॴͰจࣈྻΛҾʹͨ͠ΒͲ͏ͳ Δ͔ʁ -
Just In Time ίϯύΠϥ GVODUJPOTVN B C \ SFUVSOB C
^ ࣈΛؔ͢ TVN ԿࣈΛ͠߹Θ͓͚ͤͯɺTVNؔͷ ҾࣈɺಛʹJOUFHFSCJUҐ͔͕Θ͔Δ ͦ͏͢Εɺػցޠʹ͢Δ࣌ʹ࠷దԽ͕Ͱ͖Δɻ GVODUJPOTVN B C \ SFUVSOB C ^ ͍͖ͳΓ͜͜ͰจࣈྻΛ͢ TVN ࠷దԽ͞ΕͨॴͰจࣈྻΛҾʹͨ͠ΒͲ͏ͳ Δ͔ʁ CZUFDPEF͔ΒΓ͢͜ͱʹͳΔʢඇ࠷దԽ͕Δʣɻ ͔ͤͬ͘+*5Ͱ࠷దԽͨ͠ॲཧ͕ແବʹͳΔɻ -
JIT Λࡴ͢ཁҼҰཡ (v8) • ܕใͷෆҰக • not int32 (integer ͡Όͳ͔ͬͨ)
• not a string (จࣈྻ͡Όͳ͔ͬͨ) • not an array index (ྻͷఴࣈ͡Ό ͳ͔ͬͨ) • etc https://github.com/v8/v8/blob/master/src/deoptimizer/deoptimize-reason.h • ༧ظͤ͵ૢ࡞ • cow array's elements changed (ίϐʔͨ͠ྻ͕มߋ͞Εͨ) • division by zero (θϩআࢉ) • Out of bounds (ྻͷൣғ͑) • etc -
JIT Λࡴ͢ཁҼҰཡ (v8) • ܕใͷෆҰக • not int32 (integer ͡Όͳ͔ͬͨ)
• not a string (จࣈྻ͡Όͳ͔ͬͨ) • not an array index (ྻͷఴࣈ͡Ό ͳ͔ͬͨ) • etc https://github.com/v8/v8/blob/master/src/deoptimizer/deoptimize-reason.h • ༧ظͤ͵ૢ࡞ • cow array's elements changed (ίϐʔͨ͠ྻ͕มߋ͞Εͨ) • division by zero (θϩআࢉ) • Out of bounds (ྻͷൣғ͑) • etc ֮͑Δඞཁͳ͍͕ɺॻ࣌͘ʹʮԿΛ͠ͳ͍ํ͕͍͍͔ʯΛ ͓͍ͬͯͨ΄͏͕ྑ͍ɻ -
ͦͦ௨৴Λߦ͏ͱʁ • Public IP / PORT ΛΫϥΠΞϯτ͕͍ͬͯͯ • αʔό͕ଓΛ͍ͬͯͯ •
ͦ͜ʹଓΛཁٻ͠ • ଓΛཱ֬ͨ͠ΒɺσʔλͷަΛߦ͏ Public IP / PORT Listen Data Transfer -
͡Ό͋ IP Ͳ͏ͬͯΔͷʁ • IP DNSαʔό͔Βڭ͑ͯΒ͏ɻ • https://example.com ʹΞΫηε͠Α͏ͱͨ͠߹ɺҰΞΫηε͞Εͯͳ͔ͬͨΒ
DNS Lookup (໊લ͔ΒIPΞυϨεΛҾ͘ߦҝ)͕ߦΘΕΔɻ • DNS Lookup ͦͷϦΫΤετઌͷυϝΠϯʹԠͯ͡ൃੜ͢ΔͷͰɺ 3rd party domain ͕ϖʔδʹ͋Δ߹ʢҰ๚͞Εͯͳ͔ͬͨΒʣͦͷ࣌Ͱൃੜ͢ Δɻ EJHFYBNQMFDPN 01514&6%04&$5*0/ &%/4WFSTJPO qBHTVEQ 26&45*0/4&$5*0/ FYBNQMFDPN */ " "/48&34&$5*0/ FYBNQMFDPN */ " -
PORT ʁ • ༗໊ͳϓϩτίϧͷ߹༧Ίܾ·ͬͯΔɻ • http ͳΒ 80 ൪ɺ https
ͳΒ 443 ൪ͱ͍ͬͨ෩ʹɻ • ͜ͷ༧ΊܾΊΒΕͨ PORT ͷ͜ͱΛ well-known PORT ͱݺͿɻ • well-known ͳ PORT ಛݖ͕ඞཁͳέʔεଟ͍ͷͰɺ։ൃ ڥͰ 3000 ൪ͱ͔ʹͯ͠ɺ localhost:3000 Ͱݺͼग़͢͜ͱ ଟ͍ɻ -
ଓΛཱ֬ͱ͍͏ͷʁ • (؆ུԽͷͨΊ) TCP Λϕʔεʹ͢ͱɺ֘ͷαʔόʹ͍͖ͳ Γଓ͢ΔͷͰͳ͘ɺ3ճͷଓ֬ೝΛܦͯଓ͢Δɻ • ͜ͷଓ֬ೝͷ͜ͱΛ 3 way
handshake ͱݺͿɻ ͭͳ͛ΔΑʔ (SYN) ͍͍Αʔ ͬͪͭ͜ͳ͛ΔΑʔ(SYN-ACK) ͡Ό͋ͭͳ͙Ͷʔ (ACK) -
͡Ό͋ࢲͷ伴ͱ߹Θͤͯ͜ΕͰ͠·͠ΐ͏ɻ (Client Certificate) ଓΛཱ֬ͱ͍͏ͷʁ • HTTP ͳΒ͜ΕͰܨ͕Δ͕ɺ࠷ۙͷେମͷWebαʔό HTTPS ͳͷͰɺ͜Ε͚ͩͰܨ͕Βͳ͍ɻ҉߸ԽͷͨΊͷΓऔΓ͕ߋ ʹߦΘΕΔɻ(※؆ུԽ͍ͯ͠ΔͨΊɺਖ਼֬Ͱͳ͍)
ΑΖ͓͘͠ئ͍͍ͨ͠·͢ɻ(Client Hello) ͪ͜Βͦ͜ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ (Server Hello) Θͨ͜͠͏͍͏ͷͰ͢ɻ (Server Certificate) ͜͏͍͏伴Ͱͤ·͢ (Server Key Exchange) Θͨ͜͠͏͍͏ͷͰ͢ɻ(Client Certificate) -
͡Ό͋ࢲͷ伴ͱ߹Θͤͯ͜ΕͰ͠·͠ΐ͏ɻ (Client Certificate) ଓΛཱ֬ͱ͍͏ͷʁ • HTTP ͳΒ͜ΕͰܨ͕Δ͕ɺ࠷ۙͷେମͷWebαʔό HTTPS ͳͷͰɺ͜Ε͚ͩͰܨ͕Βͳ͍ɻ҉߸ԽͷͨΊͷΓऔΓ͕ߋ ʹߦΘΕΔɻ(※؆ུԽ͍ͯ͠ΔͨΊɺਖ਼֬Ͱͳ͍)
ΑΖ͓͘͠ئ͍͍ͨ͠·͢ɻ(Client Hello) ͪ͜Βͦ͜ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ (Server Hello) Θͨ͜͠͏͍͏ͷͰ͢ɻ (Server Certificate) ͜͏͍͏伴Ͱͤ·͢ (Server Key Exchange) Θͨ͜͠͏͍͏ͷͰ͢ɻ(Client Certificate) )5514௨৴5$1ͷΓऔΓͷޙͰ҉߸ԽͷͨΊͷऔΓܾ ΊΛ͢Δεςοϓ͕͋ΔɻͦΕΛܦͯଓ͞ΕΔɻ -
ؓٳ TLS/1.3 • TLS 1.3 Ͱ࠷ॳͷଓ࣌ʹϥϯυτϦοϓΛݮΒ͢ࢼΈΛ͍ͯ͠Δɻ • 0-RTT ͱݺΕΔΈͰ͍͖ͳΓ Client
͕ Hello Λඈͯ͠σʔλΛ ૹΔ͜ͱՄೳʹɻ Making the web faster with HTTP/3 by kazuho https://vimeo.com/485450984 -
σʔλͷΓऔΓ • ଓཱ͕֬͞Εͨޙ HTTP ϓϩτίϧʹΑΔσʔλͷΓऔΓΛߦ͏ɻ • HTTP جຊతʹϦΫΤετ / ϨεϙϯεͰͷΓऔΓ͕ߦΘΕΔɻ
• HTTP ϦΫΤετʹϦΫΤετߦͱϔομʔͱݺΕΔϝλใͱϘσΟ ͱݺΕΔίϯςϯτใؚ͕·ΕΔɻ(※ ؆ུԽͷͨΊHTTP/1.1ͷղઆ) • 1045JOEFYIUNM)551 BDDFQUUFYUIUNM BDDFQUFODPEJOHH[JQ EFqBUF CS BDDFQUMBOHVBHFFO64 FOR KBR DBDIFDPOUSPMOPDBDIF DPPLJFGPPCBSCB[ GPPCBSIPHFGVHB ϦΫΤετߦ ϦΫΤετϔομʔ ϦΫΤετϘσΟ σʔλ༰ -
σʔλͷΓऔΓ • ϦΫΤετΛड͚औͬͨΒαʔόϨεϙϯεʢԠʣΛฦ͢ • HTTP ϨεϙϯεʹεςʔλεΛද͢ใͱϨεϙϯεϔομ ʢϝλσʔλʣɺϨεϙϯεϘσΟʢ༰ʣؚ͕·ΕΔ )5510, "HF $BDIF$POUSPMNBYBHF
$POUFOU5ZQFUFYUIUNMDIBSTFU65' %BUF.PO "QS(.5 $POUFOU-FOHUI EPDUZQFIUNM IUNM IFBE εςʔλεߦ Ϩεϙϯεϔομ ϨεϙϯεϘσΟ -
4FSWFS GET /main.css GET /main.js GET /image0.png σʔλͷΓऔΓ GET /index.html
200 OK 200 OK 404 Not Found 304 Not Modified -
4FSWFS GET /main.css GET /main.js GET /image0.png σʔλͷΓऔΓ GET /index.html
200 OK 200 OK 404 Not Found 304 Not Modified )551্ͰσʔλͷΓऔΓ͕ߦΘΕɺͦΕ͕ϨϯμϦϯάϓ ϩηε+4Τϯδϯ͕࣮ߦ͞ΕΔϑΣʔζΛܦͯϖʔδ͕ग़Δ -
σʔλͷΓऔΓ: HTTP/3 • HTTP/2 Ͱଓίετͷݮ͕Ͱ͖͕ͨ͋Δɻ • ωοτϫʔΫଓ͕ෆ҆ఆͳ߹ TCP ଓʹΑΓɺͯ͢ͷίωΫ γϣϯ͕ղܾ·Ͱʹͨ͞ΕΔέʔε͕༗Δɻཁύέϩεʹऑ͍ɻ
• 4FSWFS 5$1ͷϨΠϠͰෆ߹͕͋Δͱෆ߹͕గਖ਼͞Ε Δ·Ͱશମ͕ϒϩοΫ͞ΕΔɻ -
TCP͓͞Β͍ • TCP ৴པੑ͕ߴ͍ϓϩτίϧ • ύέϩε࣌ͷ࠶ૹ੍ޚॱং౸ୡ੍ޚͳͲɺసૹ࣌ͷΛղ ܾͯ͘͠ΕΔɻ 4FSWFS ) &
- "DL & "DL͕དྷ ͳ͍ ࠶ૹ͢Δ "DL ͕དྷ͚ͨͲͦΕ ·Ͱड৴ͨ͠ͷ ഁغ͢ΔͶɻ - ͔Β ͏Ұ࠶ -
HTTP/3 • UDP ্ʹϓϩτίϧΛ࡞͍ͬͯΔ • TCPͷޡΓగਖ਼ͳͲͷΈΛࣗͨͪͷϨΠϠ্Ͱ࠶࣮ 4FSWFS ) & -
͕དྷͯͳ͍Α ̐& ඞཁͳ ͷͷΈ ࠶ૹ Λͨ͠· ·͕དྷͨ͜ ͱʹ͢Δ -
Cache Storage • ϨεϙϯεΛΩϟογϡ͢ΔΈ 4FSWFS GET /main.css GET /main.js GET
/image0.png GET /index.html 200 OK 200 OK 404 Not Found 304 Not Modified Ұճμϯϩʔυͨ͠ϑΝΠϧωοτϫʔΫ͔ΒಡΈࠐΈͨ ͘ͳ͍ɻ࠶ར༻͍ͨ͠ɻ -
Cache Storage • αʔόଆ͕ HTTP ϨεϙϯεϔομʹΩϟογϡͱ͠ ͯอଘͯ͠ྑ͍͔Ͳ͏͔/Ωϟογϡ༗ޮظؒΛࣔͤ Ωϟογϡ͕༗ޮʹͳΔɻ • Cache-Control
/ ETag ͱ͍ͬͨΩϟογϡ༻ͷϔομ Λ׆༻͢Δɻ $BDIF$POUSPMNBYBHFඵؒɺΫϥΠΞϯτͷ$BDIFͱ ͯ͠༗ޮ &UBH JEFOUσʔλͷࣝผՄೳͳɺ&UBH͕มΘͬͯ ͍ͳ͍͔Ͳ͏͔Λαʔόʹ͍߹ΘͤͯมΘ͍ͬͯͳ͔ͬͨΒΩϟογϡ͕ ΘΕΔɻมΘ͍ͬͯͨΒ࠶μϯϩʔυ -
Cookie Storage • ΫϥΠΞϯτͷσʔλͱͯ͠อଘ͞Εɺϒϥβ͔Β αʔόʹຖճϦΫΤετ͕ૹ৴͞ΕΔɻ • ओʹҎԼͷΑ͏ͳ༻్ͰΘΕΔɻ • ηογϣϯཧʢϩάΠϯɺγϣοϐϯάΧʔτͳͲʣ •
ύʔιφϥΠζʢϢʔβઃఆɺςʔϚͳͲʣ • τϥοΩϯάʢϢʔβʔͷߦಈهੳʣ -
Cookie Storage • Ϩεϙϯεϔομʹ Set-Cookie ͔Β࢝·ΔσʔλΛೖ ΕΔ͜ͱͰอଘͤ͞Δ͜ͱ͕Ͱ͖Δɻ • ࣍ճҎ߱ͷϦΫΤετͰͦͷ Cookie
͕αʔόʹૹΒ ΕΔɻ 4FSWFS Set-Cookie: id=1; Cookie: id=1; -
Cookie Storage • Cookie Λͬͯྫ͑ϩάΠϯޭ࣌ʹηογϣϯID Λ༩͢Δɻ • ࣍ճҎ߱ηογϣϯID͕༗ޮ͔Ͳ͏͔Λ֬ೝ͢Ε ϩάΠϯ͍ͯ͠Δ͔Ͳ͏͔ΛαʔόଆͰผͰ͖Δɻ •
ͦͷࡍʹ Expires MaxAge ଐੑΛ͍͑ͭ·Ͱอ ࣋ͤ͞Δ͔ࢦఆͰ͖Δɻ -
Cookie Storage id pass 4FSWFS GET / 302 Redirect GET
/login 200 OK POST /login id=foo&pass=xxx 302 Redirect Set-Cookie: session=xxx GET / cookie: session=xxx -
Cookie Storage id pass 4FSWFS GET / 302 Redirect GET
/login 200 OK POST /login id=foo&pass=xxx 302 Redirect Set-Cookie: session=xxx GET / cookie: session=xxx 4FTTJPO$PPLJFΛ࡞Δ·ͰͷྲྀΕ -
αʔόΛ࡞Δ • Ұ୴͔͜͜ΒϋϯζΦϯΛ։࢝͠·͢ɻ • Node.js ͕ඞཁͳͷͰೖΕ͓͍͍ͯͯͩ͘͞ɻ • HTML Λ৴Ͱ͖ΔΑ͏ʹͳΔ·Ͱ࡞͓ͬͯ ͍ͨͷͰɺ
clone ࣮ͯ͠ߦ͍ͯͩ͘͠͞ɻ • HJUDMPOFIUUQTHJUIVCDPNSFDSVJUUFDICSPXTFSIBOETPOHJU DECSPXTFSIBOETPO OQNJOTUBMM OPEFBQQNKT PQFOIUUQMPDBMIPTU -
࣮ࡍͷϦΫΤετ/ϨεϙϯεΛ ோΊΔ • ಈ͍ͨΒ࣮ࡍͷϦΫΤετ/ϨεϙϯεΛோΊ ͯΈ·͠ΐ͏ɻ • Chrome Ͱ։ൃπʔϧ(⌘ + Shift
+ I)Λ։͖ɺ ωοτϫʔΫλϒʹભҠ͠ɺϦΫΤετɾϨ εϙϯεΛݟͯΈ·͢ɻ -
ωοτϫʔΫͷΓऔΓ • ͔ͤͬ͘ͳͷͰ https ʹͯ͠Έ·͠ΐ͏ɻ • લॲཧͱͯ͠CAͱূ໌ॻΛ࡞Γɺແཧཧ trust ͓͖ͤͯ͞·͢ɻ OQNFYFDNLDFSUDSFBUFDB
OQNFYFDNLDFSUDSFBUFDFSU TVEPTFDVSJUZBEEUSVTUFEDFSUESUSVTU3PPUL-JCSBSZ ,FZDIBJOT4ZTUFNLFZDIBJODBDSU -
ωοτϫʔΫͷΓऔΓ • Node.js ଆ https ʹରԠͤͯ͞Έ·͠ΐ͏ɻ • ઌఔ࡞ͬͨ cert ϑΝΠϧΛಡΊྑ͍Ͱ͢ɻ
BQQNKT JNQPSU\SFBE'JMF4ZOD^GSPNGTه JNQPSU\DSFBUF4FSWFS^GSPNIUUQTIUUQ͔ΒIUUQTʹมߋ DPOTUSFRTPO DSFBUF4FSWFS \ LFZSFBE'JMF4ZOD DFSULFZ ه DFSUSFBE'JMF4ZOD DFSUDSU ه ^ MJTUFO QPSU -
ωοτϫʔΫͷΓऔΓ • खͬऔΓૣ͘ curl ͰΞΫηεͯ͠தΛݟͯ Έ·͠ΐ͏ɻ DVSMJWWWIUUQTMPDBMIPTUMPHJO $POOFDUFEUPMPDBMIPTU QPSU
TVDDFTTGVMMZTFUDFSUJpDBUFWFSJGZMPDBUJPOT 5-4W 065 5-4IBOETIBLF $MJFOUIFMMP 5-4W */ 5-4IBOETIBLF 4FSWFSIFMMP 5-4W */ 5-4IBOETIBLF $FSUJpDBUF 5-4W */ 5-4IBOETIBLF 4FSWFSLFZFYDIBOHF 5-4W */ 5-4IBOETIBLF 4FSWFSpOJTIFE -
ωοτϫʔΫͷΓऔΓ • ࣍ʹ http2 ʹͯ͠Έ·͠ΐ͏ɻ • http2 ͷ createSecureServer Λͬͯ
http2 αʔόΛཱͯͯΈ·͠ΐ͏ɻ • Chrome ͷ։ൃऀπʔϧͰ http2 ʹͳ͍ͬͯ ΕޭͰ͢ɻ -
σʔλετϨʔδΛࢼ͢ • ϩάΠϯΛޭͤͯ͞Έ·͠ΐ͏ɻ • id/password ΛνΣοΫ͠ɺ߹க͍ͯͨ͠ΒޭϨεϙϯ ε (302, Location: "/")
ͱڞʹ Set-Cookie ͰΫοΩʔʹ ηογϣϯIDΛೖΕͯΈ·͠ΐ͏ʢηογϣϯIDԿͰ Մʣɻ • ϩάΠϯηογϣϯ͕ϦμΠϨΫτ͞Εɺ `Login Success!` ͕දࣔ͞Ε͍ͯͨΒޭͰ͢ɻ -
JavaScript Τϯδϯʹ͍ͭͯ • ͪͳΈʹࠓͷ script.js ͑ͯಈ͔ͳ͍Α͏ʹͳͬ ͯ·͢ɻ • ಈ͘Α͏ʹͯ͠Έ͍ͯͩ͘͞ɻͳΜͰಈ͔ͳ͍͔Λ ࢦఠͰ͖ͨΒՃɻ
• DOMΛૢ࡞͠ͳ͕ΒύεϫʔυͷϚεΫΛ֎ͯ͠ɺ දࣔ͢ΔϘλϯͷಈ࡞Λ֬ೝͯ͠Έ͍ͯͩ͘͞ɻ -
Ͳ͏ͬͯϨϯμϦϯά͞Εͯ Δ͔ • ࠷ޙʹ Login Success ͷը໘͕ऐ͍͠ͷͰ HTML Ͱࣗ༝ʹϚʔ ΫΞοϓ͍ͯͩ͘͠͞ɻ
• ը૾ΛೖΕͨΓɺಈըͱ͔ೖΕͯΈͨΓ͢Δͷ͕ྑ͍Ͱ͠ΐ ͏ɻ • CSS ͷ z-index Λม͑ͯΈͯલܠͱഎܠΛม͑ͯΈ͍ͯͩ͘͞ɻ • ͷཁૉ͕ࢠͲͷཁૉʹΑͬͯߴ͕͞มΘͬͨΓ͢Δ͜ͱΛ Chrome ͷ։ൃπʔϧͰ͔֬ΊͯΈ·͠ΐ͏ɻ -
લ • ϒϥβͷػೳ • ϒϥβͷߏ • ϨϯμϦϯάͷΈ • JavaScript ΤϯδϯͷΈ
• ωοτϫʔΫͷΈ • σʔλετϨʔδͷΈ -
ϒϥβͷதͱΈΛΘ্͔ͬͨ ͰϋϯζΦϯͰҰؾʹಈ͘ͷΛࢼ͢ • ಄ͷதʹϒϥβͷϚοϓΛͬͨঢ়ଶͰϋϯζΦϯΛͬ ͯΒ͍·ͨ͠ɻ • ͯ͢Ͱ͖ͳ͔ͬͨਓ͍Δͱࢥ͏ͷͰɺͦͷํ॓ͱ͠ ͓͖ͯͯ͠·͢ɻ • ΞϓϦέʔγϣϯΛ࡞Δ͜ͱ͕Ұ൪ษڧʹͳΔͷͰ͓͢͢Ί
͠·͢ɻ • ಄ͷதʹϚοϓΛ࡞ΓɺΞϓϦέʔγϣϯΛ࡞ΓɺͦΕΛߋ ৽͢Δͱ͍͏αΠΫϧΛճ͍͖ͯ͠·͠ΐ͏ɻ