Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web技術の基本 3回目 / Introduction to Web technologies 3rd class

muttan
January 05, 2018

Web技術の基本 3回目 / Introduction to Web technologies 3rd class

muttan

January 05, 2018
Tweet

More Decks by muttan

Other Decks in Technology

Transcript

  1. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2.0ͷ΍ΓͱΓ
  2. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2ͷ΍ΓͱΓ
  3. HTTPϝοηʔδ • HTTP(Hyper Text Transfer Protocol)
 ϋΠύʔςΩετͷ΍ΓऔΓΛඪ४Խͨ͠΋ͷ ‣ ొ৔͸1990೥୅ όʔδϣϯ

    ొ৔೥ ؆୯ͳઆ໌ )551 ೥ ౰࣌͸(&5͔͠ແ͔ͬͨ )551 ೥ 1045ͳͲ
 (&5Ҏ֎ͷϝιου͕ొ৔ )551 ೥ ಉ͡*1ΞυϨεͰҟͳΔυϝΠϯΛ ఏڙ͢Δ)PTUϔομʔͷ௥Ճ )551 ೥ ετϦʔϜͷ௥Ճ
  4. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2ͷ΍ΓͱΓ
  5. HTTPϦΫΤετʢϦΫΤετߦʣ • HTTPϝιου
 ࣮ߦ͢ΔΞΫγϣϯΛද͢ಈࢺ(GET, POST, PUT, etc..) ·ͨ͸, ໊ࢺ(Head, Option)Λࢦఆ

    ॲཧ )551ϝιου $36%ૢ࡞ ొ࿥ 1045 $3&"5& औಘ (&5 3&"% ߋ৽ 165 61%"5& ࡟আ %&-&5& %&-&5&
  6. 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 ϓϩτίϧ, ϙʔτ, υϝΠϯ͸ϦΫΤετ͔Β໌Β͔ʹ͞ΕΔ
  7. HTTPϦΫΤετʢϝοηʔδϔομʣ • ϝοηʔδϔομ
 Webϒϥ΢βͷछྨ, σʔλλΠϓ, σʔλͷѹॖํ๏, ࢖༻ݴޠͳͲΛ఻͑Δ ‣ Ұൠϔομ(General Headers)


    ϝοηʔδશମʹద༻͞ΕΔ(Via, Date, ConnectionͳͲ) ‣ ϦΫΤετϔομ(Request Headers)
 User-Agent, Accept-Type, ࢦఆ͢ΔͱϦΫΤετΛมߋ͢Δ΋ͷ(Accept- Language), ঢ়گΛࣔ͢΋ͷ(Referer౳), ৚݅Λ༩͑Δ΋ͷ(If-None) ‣ ΤϯςΟςΟϔομ(Entity Headers)
 ϘσΟʹద༻͞ΕΔ(Content-length౳), ϘσΟ͕ແ͍৔߹͸ΤϯςΟςΟ ϔομ͸෇Ճ͞Εͳ͍
  8. 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 ϦΫΤετϔομͷྫ
  9. HTTPϦΫΤετʢϝοηʔδϔομʣ • ΤϯςΟςΟϔομϑΟʔϧυ(Entity Headers) ໊শ ಺༰ "MMPX ར༻Մೳͳ)551ϝιουҰཡ $POUFOU&ODPEJOH ίϯςϯπͷΤϯίʔυ

    $POUFOU-BOHVBHF ίϯςϯπͷ࢖༻ݴޠ $POUFOU-FOHUI ίϯςϯπͷ௕͞ $POUFOU5ZQF ίϯςϯπͷछྨʢςΩετ ը૾ʣ &YQJSFT ίϯςϯπͷ༗ޮظݶ -BTU.PEJpFE ίϯςϯπͷ࠷ऴߋ৽࣌ࠁ
  10. HTTPϨεϙϯεʢϝοηʔδϔομʣ • ϝοηʔδϔομ
 Webϒϥ΢βͷछྨ, σʔλλΠϓ, σʔλͷѹॖํ๏, ࢖༻ݴޠͳͲΛ఻͑Δ ‣ Ұൠϔομ(General Headers)


    ϝοηʔδશମʹద༻͞ΕΔ(ViaͳͲ) ‣ ϦΫΤετϔομ(Request Headers)
 Vary, Accept-RangesͳͲεςʔλεߦͰ͸఻ΘΒͳ͍αʔόͷ௥Ճ৘ใΛ ෇Ճ͢Δ ‣ ΤϯςΟςΟϔομ(Entity Headers)
 ϘσΟʹద༻͞ΕΔ(Content-length౳), ϘσΟ͕ແ͍৔߹͸ΤϯςΟςΟ ϔομ͸෇Ճ͞Εͳ͍
  11. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2ͷ΍ΓͱΓ
  12. HTTPϝιου ϝιου໊ આ໌ )&"% )551ϔομʔͷ৘ใͷΈΛऔಘ͢Δ σʔλͷߋ৽೔࣌΍σʔλαΠζͷΈ Λ஌Γ͍ͨ৔߹ʹ࢖༻ (&5 )5.-ϑΝΠϧ΍ը૾ͱ͍ͬͨσʔλ Λऔಘ͢Δ৔߹ʹ࢖༻

    1045 ύεϫʔυͷΑ͏ͳσʔλΛૹ৴͢Δ ৔߹ʹ࢖༻ 165 σʔλΛΞοϓϩʔυ͢ΔͨΊʹ࢖༻ ઀ଓઌͷσʔλΛॻ͖׵͑Δ VQEBUF ͢Δ͜ͱ͕Մೳ
  13. HTTPϝιου ϝιου໊ આ໌ %&-&5& ࢦఆͨ͠σʔλΛ࡟আ͢ΔͨΊʹ࢖༻ 165ͱڞʹ࢖༻੍͕ݶ͞Ε͍ͯΔ৔߹ ͕ଟ͍ $0//&$5 8FCαʔόʹ઀ଓ͢Δ·Ͱʹผͷαʔ όΛதܧ͢Δ৔߹ʹ࢖༻

    015*0/4 ར༻Ͱ͖Δ)551ϝιουΛ໰͍߹Θ ͤΔͨΊʹར༻͢Δ 53"$& ϒϥ΢βͱαʔόͷܦ࿏ΛνΣοΫ͢ Δ৔߹ʹ࢖༻͢Δ PUT, DELETE, CONNECT, TRACE͸ѱ༻Λ๷͙ͨΊ੍ݶ͞Ε͍ͯΔ͜ͱ͕ଟ͍
  14. HTTPϝιου • GETͱPOST͸զʑ΋ೃછΈͷ͋Δϝιου͕ͩ, ͲͷΑ͏ͳҧ͍ ͕͋Δͷ͔ʁ ‣ GET͸ύϥϝʔλΛURLͷޙΖʹ෇Ճ͢Δ ‣ Կ͔৘ใΛಘΔ࣌ʹ࢖͏͜ͱ͕ଟ͍ ‣

    ϒοΫϚʔΫ͕Մೳ ‣ σʔλྔʹ੍ݶΞϦ ‣ POST͸ύϥϝʔλΛϝοηʔδϘσΟʹؚΊΔ ‣ Կ͔৘ใΛొ࿥͢Δ࣌ʹ࢖͏͜ͱ͕ଟ͍ ‣ σʔλྔ͕ଟ͍, όΠφϦσʔλΛૹΔ৔߹ ‣ ύεϫʔυೝূʹ࢖ΘΕΔ͜ͱ͕ଟ͍ ࢀߟɿhttps://www.w3schools.com/tags/ref_httpmethods.asp
  15. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2ͷ΍ΓͱΓ
  16. εςʔλείʔυ • εςʔλείʔυͷ෼ྨ ‣ 100൪୆
 HTTPϦΫΤετΛॲཧதͰ͋Δ͜ͱΛ௨஌͢Δ. Webαʔό͕ σʔλड͚ೖΕՄೳ͔ͷ֬ೝͰ࢖ΘΕΔ ‣ 200൪୆


    HTTPϦΫΤετʹରͯ͠, ਖ਼ৗʹॲཧ͕ऴྃͨ͜͠ͱΛ௨஌͢Δ ‣ 300൪୆
 సૹॲཧͳͲWebϒϥ΢βଆͰ௥Ճͷॲཧ͕ඞཁͰ͋Δ͜ͱΛ ௨஌͢ΔʢϦμΠϨΫτͳͲʣ
  17. εςʔλείʔυ ൪߸ εςʔλεจࣈྻ ҙຯ  $POUJOVF ͦΕ·Ͱͷશͯʹ໰୊͕ͳ͍ͨΊ Ϧ ΫΤετΛܧଓͯ͠Α͍ 

    0, ϦΫΤετ͕ਖ਼ৗʹडཧ͞Εͨ  .PWFE1BSNBOFOUMZ ίϯςϯπ͕Ҡಈͨ͠  'PVOE Ұ࣌తʹҠಈʢผͷ৔ॴͰൃݟʣ
 ͞Εͨ  /PU.PEJpFE ϦΫΤετ͞Εͨίϯςϯπ͕ະߋ৽ Ͱ͋ΔʢΩϟογϡΛ࢖͏ʣ
  18. εςʔλείʔυ • εςʔλείʔυͷ෼ྨ ‣ 400൪୆
 ΫϥΠΞϯτଆͷΤϥʔͰ͋Δ͜ͱΛ௨஌͢Δ. ࢦఆͨ͠Ϧ ιʔε͕ଘࡏ͠ͳ͍, ݖݶ͕ͳ͍৔߹ͳͲͰ400൪୆͕௨஌ ͞ΕΔ

    ‣ 500൪୆
 WebαʔόͷΤϥʔΛ௨஌͢Δ. ߴෛՙͳঢ়ଶͰԠ౴Λฦ͢ ͜ͱ͕Ͱ͖ͳ͍৔߹, Ұ࣌తʹར༻Ͱ͖ͳ͍৔߹ʹ500൪୆ ͕௨஌͞ΕΔ
  19. εςʔλείʔυ ൪߸ εςʔλεจࣈྻ ҙຯ  #BE3FRVFTU ෆਖ਼ͳϦΫΤετ  'PSCJEEFO ΫϥΠΞϯτʹίϯςϯπ΁ͷΞΫη

    εݖ͕ͳ͍  /PU'PVOE ϦΫΤετ͞Εͨίϯςϯπ͕ະݕग़ Ͱ͋Δ  *OUFSOBM4FSWFS&SSPS ϦΫΤετॲཧதʹαʔό಺෦ͰΤ ϥʔ͕ൃੜͨ͜͠ͱΛ஌ΒͤΔ  4FSWJDF6OBWBJMBCMF ΞΫηεूத ϝϯςφϯε౳ͰҰ࣌ తʹར༻ෆՄೳͰ͋Δ͜ͱΛ஌ΒͤΔ
  20. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2ͷ΍ΓͱΓ
  21. TCPʹΑΔσʔλ௨৴ • HTTPͷσʔλͷ΍ΓऔΓΛߦͳ͏ͷ͸, TCP(Transmission Control Protocol)ͷ໾໨ • TCP͸௨৴૬खͱͷ࿦ཧతͳ௨৴࿏Ͱ͋ΔίωΫγϣϯΛཱ֬ͨ͠ ޙ, ௨৴Λ։࢝͢Δ

    ‣ 3ճͷ΍ΓऔΓʢ3΢ΣΠϋϯυγΣΠΫʣΛߦͬͯίωΫγϣϯ Λཱ֬͢Δ - ΫϥΠΞϯτ͔Βͷ઀ଓཁٻ(SYN) - ΫϥΠΞϯτ΁ͷ֬ೝԠ౴, αʔό͔Βͷ઀ଓཁٻ(SYN+ACK) - αʔόʹରͯ֬͠ೝԠ౴(ACK)
  22. ᶃFIN(Seq:30000) ᶄACK(Ԡ౴൪߸:30001) ᶆACK(Ԡ౴൪߸:40001) ੾அཁٻͷૹ৴ ੾அཁٻͷԠ౴ ੾அڐՄͷԠ౴ TCPʹΑΔσʔλ௨৴ ᶃSYN(Seq:10000) ᶄSYN(Seq:20000)+ACK(Ԡ౴൪߸:10001) ᶅACK(Seq:20001)

    ઀ଓཁٻͷૹ৴ ઀ଓڐՄͷԠ౴ ઀ଓڐՄͷԠ౴ ઀ଓཁٻͷૹ৴ σʔλͷૹड৴ ᶅFIN(Seq:40000) ੾அཁٻͷૹ৴ ίωΫγϣϯͷཱ֬ ίωΫγϣϯͷ੾அ
  23. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2ͷ΍ΓͱΓ
  24. 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 ೥ ετϦʔϜͷ௥Ճ
  25. HTTP/1.1ͷ΍ΓͱΓ • HTTPΩʔϓΞϥΠϒ
 ͦͷͨΊ, HTTP/1.1Ҏ߱Ͱ͸ίωΫγϣϯΛܧଓͯ͠ར༻͢Δ͜ͱ͕Մ ೳʹͳͬͨ. ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ίωΫγϣϯ੾அ

    ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ίωΫγϣϯ੾அ ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε ίωΫγϣϯ੾அ ඇHTTPΩʔϓΞϥΠϒ HTTPΩʔϓΞϥΠϒ
  26. HTTP/1.1ͷ΍ΓͱΓ • HTTPύΠϓϥΠϯ ‣ HTTP͸, ௨ৗHTTPϨεϙϯεΛड͚औͬͨ͋ͱ࣍ͷ ϦΫΤετΛൃߦ͢Δ ‣ ωοτϫʔΫͷঢ়ଶʹΑͬͯ͸, ஶ͍͠஗Ԇ͕ൃੜ

    → HTTPϨεϙϯεΛ଴ͭ͜ͱແ͘, ෳ਺ͷHTTPϦΫ ΤετΛૹ৴͢Δ͜ͱΛՄೳʹ͢ΔػೳΛHTTPύ ΠϓϥΠϯͱ͍͏
  27. HTTP/1.1ͷ΍ΓͱΓ • HTTPύΠϓϥΠϯ ίωΫγϣϯཱ֬ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε ίωΫγϣϯ੾அ ίωΫγϣϯཱ֬

    ίωΫγϣϯ੾அ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε ϨεϙϯεΛ଴ͨͣʹ
 ϦΫΤετΛૹ৴͢Δ HTTP/1.0Ҏલ HTTP/1.1Ҏ߱ ࣌ؒ୹ॖ
  28. ໨࣍ 1. HTTPϝοηʔδ 2. HTTPϦΫΤετ/HTTPϨεϙϯε 3. HTTPϝιου 4. εςʔλείʔυ 5.

    TCPʹΑΔσʔλ௨৴ 6. HTTP/1.1ͷ΍ΓͱΓ 7. HTTP/2ͷ΍ΓͱΓ
  29. HTTP/2ͷ΍ΓͱΓʢετϦʔϜʹΑΔଟॏԽʣ • ετϦʔϜʹΑΔଟॏԽ ‣ HTTP/1.0Ҏલ
 HTTPϦΫΤετ͸, HTTPϨεϙϯεΛ଴ͬͨޙʹૹ৴ ՄೳͱͳΔ ‣ HTTP/1.1


    ύΠϓϥΠϯʹΑΓ, ಉ࣌ʹෳ਺ͷϦΫΤετΛૹ৴͢ Δ͜ͱ͕Մೳʹͳͬͨ → ʮHTTPϦΫΤετͷॱ൪ͰϨεϙϯεΛฦ͢ʯͱ͍ ͏੍໿͕͍͍ͭͯͨ
  30. HTTP/2ͷ΍ΓͱΓʢετϦʔϜʹΑΔଟॏԽʣ ϦΫΤετᶃ Ϩεϙϯεᶃ Ϩεϙϯεᶄ HTTPύΠϓϥΠϯ ετϦʔϜʹΑΔଟॏԽ ࣌ؒ୹ॖ ϦΫΤετᶄ ϦΫΤετᶅ ॲཧ଴ͪ

    Ϩεϙϯεᶅ ϦΫΤετᶃ ϦΫΤετᶄ ϦΫΤετᶅ Ϩεϙϯεᶃ Ϩεϙϯεᶄ Ϩεϙϯεᶅ ϦΫΤετͷॱ൪Ͱ
 ϨεϙϯεΛฦ͢ඞཁ͋Γ ετϦʔϜ͕ҟͳΕ͹ 
 Ϩεϙϯεͷॱ൪͸
 ੍ݶ͞Εͳ͍