Save 37% off PRO during our Black Friday Sale! »

HTTPステータスコード 完全に理解した/http-status-code-perfectly-understood-dawn

E629af0f4930348f61b8f5cc1af49870?s=47 星影
February 27, 2020

HTTPステータスコード 完全に理解した/http-status-code-perfectly-understood-dawn

『完全に理解した人達の「Web技術」Talk #2 』の発表スライドです
https://easy2.connpass.com/event/167520/

E629af0f4930348f61b8f5cc1af49870?s=128

星影

February 27, 2020
Tweet

Transcript

  1. HTTPεςʔλείʔυ ׬શʹཧղͨ͠

  2. @unsoluble_sugar
 TOPGATE, Inc. Leader/Engineer

  3. https://unsolublesugar.com

  4. https://qiita.com/unsoluble_sugar

  5. HTTP εςʔλείʔυ ׬શʹཧղͯ͠·͔͢ʁ

  6. ฉ͍ͨ͜ͱ͋Δ
 ׬શʹཧղͨ͠ Կ΋Θ͔Βͳ͍ νϣοτσΩϧ

  7. HTTPεςʔλείʔυͱ͸ • ݫີʹ͸HTTPϨεϙϯεͷεςʔλείʔυ • αʔό͔ΒͷϨεϙϯεͷҙຯΛද͢3ܻͷ਺ࣈίʔυͷ͜ͱ • ಛఆͷHTTPϦΫΤετ͕ਖ਼ৗʹ׬͔ྃͨ͠Λࣔ͢

  8. HTTPϨεϙϯε Ϩεϙϯεϝοηʔδ͸େ͖̏͘छྨͷ৘ใʹ෼͚ΒΕΔ εςʔλεϥΠϯ
 ʢϓϩτίϧ εςʔλείʔυ ςΩετϑϨʔζʣ )551Ϩεϙϯεϔομ )551ϨεϙϯεϘσΟ

  9. εςʔλείʔυ͸ϔομ1ߦ໨ HTTP/1.1 200 OK
 Date: Sat, 22 Feb 2020 08:09:30

    GMT
 Content-Type: application/json; charset=utf-8
 Connection: keep-alive
 Server: nginx
 ETag: "e287c729017cc9785487098b6b103af6"
 Cache-Control: max-age=0, private, must-revalidate
 X-UA-Compatible: IE=Edge,chrome=1
 X-Runtime: 0.003487
  10. εςʔλείʔυ͸5ͭͷΫϥεʹ෼ྨ 100൪୆ɿ৘ใϨεϙϯε 200൪୆ɿ੒ޭϨεϙϯε 300൪୆ɿϦμΠϨΫτ 400൪୆ɿΫϥΠΞϯτΤϥʔ 500൪୆ɿαʔόΤϥʔ

  11. 100൪୆ ৘ใϨεϙϯε

  12. 100൪୆ • ॲཧ͕ܧଓ͍ͯ͠Δ͜ͱΛࣔ͢ • ΫϥΠΞϯτ͸ͦͷ··ϦΫΤετΛܧଓ͢Δ͔ɺαʔόʔͷ ࢦࣔʹैͬͯϓϩτίϧΛΞοϓσʔτͯ͠࠶ૹ৴͢Δ • HTTP/1.0ن໿ʹ1xx൪߸ͷఆ͕ٛͳ͍ͨΊɺ100൪୆͸͋·Γ ར༻͞Εͳ͍

  13. 100൪୆ • 100 Continue
 αʔό͕ϦΫΤετͷड৴Λ͠ڋ൱͍ͯ͠ͳ͍ɻΫϥΠΞϯτ ͸ϦΫΤετΛܧଓͰ͖Δ • 101 Switching Protocols


    αʔό͸ϓϩτίϧͷ੾Γସ͑Λཁٻ͍ͯ͠Δ
  14. 200൪୆ ੒ޭϨεϙϯε

  15. 200 OK • ੒ޭ࣌ʹฦ͢εςʔλείʔυͱͯ͠࠷΋ଟ༻͞ΕΔ • ϦΫΤετͨ͠ॲཧ͕੒ޭɺࢦఆͨ͠σʔλͷऔಘʹ੒ޭ • GETɿϘσΟʹϦιʔεؚ͕·ΕΔ • PUT,

    POSTɿϘσΟʹॲཧ݁Ռؚ͕·ΕΔ
  16. 201 Created • POST, PUTɿϦΫΤετ͕੒ޭ͠Ϧιʔε͕࡞੒͞Εͨ • POSTͷ৔߹͸ϨεϙϯεͷLocationϔομʹURI͕ೖΔ • Ϣʔβʔ৽نొ࿥ɺը૾ΞοϓϩʔυɺDBͷςʔϒϧ௥ՃͳͲ •

    ϘσΟʹ͸৽͘͠࡞੒ͨ͠ϦιʔεΛೖΕΔ͜ͱ͕ଟ͍͕ɺಛ ʹԿ΋ೖΕͳͯ͘΋ྑ͍
  17. 202 Accepted • ϦΫΤετ͸डཧ͞Ε͕ͨɺ·ͩॲཧ͕׬͍ྃͯ͠ͳ͍ • ϑΝΠϧܗࣜͷม׵΍ϓογϡ௨஌ͷϦΫΤετɺόονॲཧ ͳͲɺαʔόଆͰඇಉظʹߦ͏ॲཧ͕͋Δ৔߹ʹฦ͢

  18. 204 No Content • ϨεϙϯεϘσΟ͕ۭͷͱ͖ʹฦ͢ • DELETEͰσʔλ࡟আΛߦͬͨࡍʹฦ͢ • POSTͰϑΥʔϜ಺༰Λૹ৴͕ͨ͠ը໘ߋ৽͕ͳ͍৔߹ •

    PUT΍PATCHͰਖ਼͘͠σʔλߋ৽͞Εͨ৔߹ • DELETEҎ֎Ͱ͸͋·Γ࢖͏΂͖Ͱ͸ͳ͍ͱ͍͏ҙݟ΋͋Δ
  19. 205 Reset Content • ϢʔβʔΤʔδΣϯτͷը໘ΛϦηοτ͢Δ৔߹ʹฦ͞ΕΔ • 204ͱಉ͘͡ϨεϙϯεϘσΟ͸ͳ͠

  20. 300൪୆ ϦμΠϨτ

  21. 300 Multiple Choices • ϦΫΤετʹରͯ͠ෳ਺ͷϨεϙϯε͕͋Δ͜ͱΛࣔ͢ • બ୒ࢶ΁ϦϯΫ͢ΔHTML͕ఏࣔ͞ΕɺϢʔβʔΤʔδΣϯτ ΍Ϣʔβʔ͸ͦΕΒ͔ΒͻͱͭΛબ୒͢Δ

  22. 301 Moved Permanently • ϦΫΤετ͞ΕͨϦιʔεͷURL͕߃ٱతʹมߋ͞Εͨ • WebαΠτͷҠస΍ɺHTTP͔ΒHTTPS΁ͷϦμΠϨΫτͳͲ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ

  23. 302 Found • ϦΫΤετ͞ΕͨϦιʔεͷURL͕Ұ࣌తʹมߋ͞Εͨ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ • ࣮ࡍ͸303ͷ༻్Ͱ࢖ΘΕΔ͜ͱ͕ଟ͘ɺ307ͱͯ͠࠶ఆٛ͞ ΕͨͨΊݱࡏ͸ਪ঑͞Ε͍ͯͳ͍

  24. 303 See Other • ϦΫΤετ͞ΕͨϦιʔεΛผͷURIͰऔಘͰ͖Δ͜ͱΛࣔ͢ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ • ϒϥ΢βͷϑΥʔϜ͔ΒPOSTͰॲཧΛߦͬͨϨεϙϯεͱ͠ ͯɺ݁Ռը໘ʹϦμΠϨΫτ͢Δͱ͖ʹ࢖͏

  25. 307 Temporary Redirect • Ұ࣌తϦμΠϨΫτ • 302ͷن֨֎ͳ࢖༻๏͕ԣߦͨͨ͠Ί࠶ఆٛͨ͠΋ͷ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ •

    ϢʔβʔΤʔδΣϯτ͸࢖༻͢ΔHTTPϝιουΛมߋͯ͠͸ͳ Βͳ͍
  26. 308 Permanent Redirect • ߃ٱతϦμΠϨΫτ • 301ͷن֨֎ͳ࢖༻๏͕ԣߦͨͨ͠Ί࠶ఆٛͨ͠΋ͷ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ •

    ϢʔβʔΤʔδΣϯτ͸࢖༻͢ΔHTTPϝιουΛมߋͯ͠͸ͳ Βͳ͍
  27. 400൪୆ ΫϥΠΞϯτΤϥʔ

  28. 400 Bad Request • ϦΫΤετ͕ෆਖ਼ • ఆٛ͞Ε͍ͯͳ͍ϝιουΛ࢖ͬͨΓɺύϥϝʔλʹؒҧ͍͕ ͋ΔͳͲɺΫϥΠΞϯτͷϦΫΤετ͕͓͔͍͠৔߹ • ΄͔ʹద੾ͳΫϥΠΞϯτΤϥʔΛࣔ͢εςʔλείʔυ͕ͳ

    ͍৔߹ʹ΋༻͍Δ
  29. 401 Unauthorized • ೝূΤϥʔ • ϩάΠϯ͕ඞཁͳϖʔδͰID΍ύεϫʔυΛؒҧ͑ͨ৔߹ • ϦΫΤετʹඞཁͳAuthorizationϔομΛؚ·ͳ͍৔߹ • τʔΫϯ͕ࣦޮɺഁଛ͍ͯ͠ΔͳͲෆਖ਼ͳ৔߹

  30. 403 Forbidden • ೝՄΤϥʔ • ڐՄ͞Ε͍ͯͳ͍ͳͲͷཧ༝ͰΫϥΠΞϯτͷΞΫηεݖݶ͕ ͳ͘ɺαʔό͔ΒͷϨεϙϯε͕ڋ൱͞Εͨ • ಛఆͷIPΞυϨεͷΈ͔ΒΞΫηεͰ͖Δ৔߹ͳͲʹ༻͍Δ •

    401ͱ͸ҟͳΓɺΫϥΠΞϯτͷࣝผ͸͞Ε͍ͯΔ
  31. 404 Not Found • ϦΫΤετ͞ΕͨϦιʔε͕ଘࡏ͠ͳ͍ • WebͰසൟʹݟΒΕΔ༗໊ͳΤϥʔεςʔλείʔυͷͻͱͭ • ͦ΋ͦ΋URIࣗମ͕ଘࡏ͠ͳ͍ͷ͔ɺऔಘର৅ͷϦιʔε͕ଘࡏ͠ͳ͔ͬ ͨͷ͔ͳͲɺৄࡉ৘ใΛࣔ͢ඞཁ͕͋Δ

    • ڐՄ͞Ε͍ͯͳ͍ΫϥΠΞϯτ͔ΒϦιʔεͷଘࡏΛӅͨ͢Ίɺ 403ͷ ୅ΘΓʹ404Λฦ͢͜ͱ΋͋Δ
  32. 405 Method Not Allowed • ΤϯυϙΠϯτ͸ଘࡏ͢Δ͕ڐՄ͞Ε͍ͯͳ͍HTTPϝιου • GETͰΞΫηεՄೳͳݕࡧAPIΛPOSTͰ࢖༻͠Α͏ͱͨ͠৔߹ • API͕ϦιʔεͷDELETEΛېࢭ͍ͯ͠Δ৔߹

  33. 408 Request Timeout • ࢦఆ࣌ؒ಺ʹϦΫΤετ͕׬ྃ͠ͳ͔ͬͨ • ChromeɺFirefoxͳͲɺӾཡΛߴ଎Խ͢ΔͨΊͷHTTPࣄલ઀ଓ ػೳΛ࢖༻͢Δϒϥ΢βͰΑ͘࢖༻͞ΕΔ • ճઢͷ઀ଓ଎౓͕௿Լ͍ͯ͠Δ৔߹ͳͲʹൃੜ

  34. 409 Conflict • Ϧιʔεͷڝ߹͕ൃੜͨ͠৔߹ • ͢Ͱʹଘࡏ͢ΔϝʔϧΞυϨε΍ಉҰIDͷϢʔβʔొ࿥Λߦ͓ ͏ͱͨ࣌͠ • ۭͰ͸ͳ͍σΟϨΫτϦΛ࡟আ͠Α͏ͱͨ͠ΓɺϦιʔεͷ໊ લΛ͢ͰʹଞͰ࢖ΘΕ͍ͯΔ΋ͷʹมߋ͠Α͏ͱͨ࣌͠ͳͲ

  35. 410 Gone • ϦΫΤετ͞Εͨίϯςϯπ͕αʔό͔ΒӬٱʹ࡟আ͞ΕɺసૹઌΞυϨε ͕ͳ͍৔߹ • 404ͱҧ͍ʮ͔ͭͯଘࡏ͍͕ͯͨ͠ࠓ͸΋͏ଘࡏ͍ͯ͠ͳ͍ʯ͜ͱΛද͢ • ظؒݶఆͷϓϩϞʔγϣϯαΠτͳͲͰར༻͢Δ͜ͱΛҙਤ͍ͯ͠Δ •

    Ϣʔβʔ৘ใΛѻ͏APIͰ410Λฦ͢࢓༷͸ɺݸਓ৘ใอޢͷ؍఺͔Β໰୊ࢹ ͞ΕΔՄೳੑ΋͋Δʢ࡟আͨ͠ͱ͍͏৘ใΛอ͍࣋ͯ͠Δ㲈׬શʹ࡟আ͞Εͯ ͍ͳ͍ʣ
  36. 413 Payload Too Large • ϦΫΤετϔομɺϘσΟ͕αʔόͰఆΊ͍ͯΔ্ݶΛ௒͑ͯ ͍Δ͜ͱΛࣔ͢ • ڐ༰αΠζҎ্ͷϑΝΠϧΞοϓϩʔυ͕ߦΘΕͨ࣌ͳͲ •

    αʔό͸ίωΫγϣϯΛด͡Δ͔ɺRetry-After ϔομΛฦ͢
  37. 414 URI Too Long • ΫϥΠΞϯτ͕ϦΫΤετͨ͠URI͕ɺαʔόͰѻ͑Δ௕͞Λ ௒͍͑ͯΔ • ΫΤϦύϥϝʔλʹ௕ա͗Δσʔλ͕ࢦఆ͞Εͨ࣌ͳͲ

  38. 415 Unsupported Media Type • ϦΫΤετ͞ΕͨσʔλͷϝσΟΞܗࣜʢContent-Typeʣʹ αʔόʔ͕ରԠ͓ͯ͠Βͣɺαʔό͕ϦΫΤετΛڋ൱ͨ͠ • JSONϦΫΤετ͔͠ड͚औΕͳ͍APIʹXML͕ૹΒΕͨɺα ϙʔτ͢Δը૾ܗࣜҎ֎ͷը૾ΛΞοϓϩʔυ͠Α͏ͱͨ࣌͠

    ͳͲ
  39. 429 Too Many Requests • ΞΫηεճ਺͕ڐ༰ൣғͷݶքΛ௒͑ͨ৔߹ʹฦ͢ • 2012೥ʹRFC6585Ͱఆٛ͞Εͨ৽͍͠εςʔλείʔυ • Ұఆͷ࣌ؒ಺ʹϨʔτϦϛοτΛ௒͑ΔେྔͷϦΫΤετΛૹ

    ৴ͨ͠ʢྫɿ1෼ؒʹ60ճͳͲͷAPIϦΫΤετ੍ݶʣ
  40. 500൪୆ αʔόΤϥʔ

  41. 500 Internal Server Error • αʔόଆʹԿΒ͔ͷҟৗ͕ൃੜ͠ਖ਼ৗͳϨεϙϯε͕ฦͤͳ͍ • ʮԿΒ͔ͷҟৗ͕ൃੜ͠·ͨ͠ʯతͳΤϥʔϝοηʔδ͕ฦΔ ͜ͱ͕ଟ͘ɺΫϥΠΞϯτଆͰ͸ղܾෆೳ •

    ΄͔ʹద੾ͳΤϥʔίʔυ͕ͳ͍৔߹ʹ΋༻͍Δ • αʔόʔͷΤϥʔϩάΛݟΕ͹ݪҼ͕Θ͔Δ͔΋
  42. 502 Bad Gateway • ήʔτ΢ΣΠ·ͨ͸ϓϩΩγʹ໰୊͕ൃੜ͍ͯ͠Δ • ήʔτ΢ΣΠͱͯ͠ಈ࡞͢Δαʔό͕ແޮͳϨεϙϯεΛड͚ औͬͨ

  43. 503 Service Unavailable • αʔό͕ϦΫΤετΛॲཧ͢Δ४උ͕Ͱ͖͍ͯͳ͍ঢ়ଶ • Ұ࣌తͳΞΫηεूத΍ϝϯςφϯεʹΑΓαʔό͕μ΢ϯ͠ ͍ͯΔ • ϝϯςφϯεͷ৔߹͸ɺRetry-Afterϔομʹ࠶։༧ఆ࣌ظʢ͓

    ΑͦԿඵޙ͔ʣΛؚΊΔ͜ͱ΋Ͱ͖Δ
  44. 504 Gateway Timeout • ήʔτ΢ΣΠͱͯ͠ಈ࡞͢Δαʔό͕ࢦఆ࣌ؒ಺ʹϨεϙϯε ΛಘΒΕͳ͔ͬͨ • αΠτҠߦͳͲʹΑΔҰ࣌తͳDNSҟৗͷ৔߹΋

  45. 505 HTTP Version Not Supported • ϦΫΤετͨ͠HTTPϓϩτίϧͷόʔδϣϯʹαʔό͕ରԠ͠ ͍ͯͳ͍

  46. None
  47. ·ͱΊ εςʔλείʔυΛҙࣝͨ͠ઃܭΛߦ͏͜ͱͰ
 αʔόͱΫϥΠΞϯτؒͷ։ൃ͕εϜʔζʹਐΉ ෆద੾ͳεςʔλείʔυΛׂΓ౰ͯͯ͠·͏ͱ
 ΫϥΠΞϯτଆ͕ࠞཚ͠ɺγεςϜશମͷڍಈʹࢧোΛ͖ͨ͢͜ͱ΋… εςʔλείʔυΛཧղ͢Δ͜ͱͰ
 ໰୊ͷ੾Γ෼͚΍൑அ͕͠΍͘͢ͳΔ

  48. ࢀߟॻ੶ WebΛࢧ͑Δٕज़ ᴷ HTTPɺURIɺHTMLɺͦͯ͠REST
 ࢁຊཅฏɹஶʢWEB+DB PRESS plusʣ
 2010೥4݄ ൃߦ
 Web

    API: The Good Parts
 ਫ໺ و໌ɹஶʢΦϥΠϦʔδϟύϯʣ
 2014೥11݄ ൃߦ
  49. ࢀߟURL • HTTP Ϩεϙϯεεςʔλείʔυ - HTTP | MDN
 https://developer.mozilla.org/ja/docs/Web/HTTP/Status •

    IETF Documents
 https://tools.ietf.org/html/ • HTTPεςʔλείʔυ - Wikipedia
 https://ja.wikipedia.org/wiki/HTTPεςʔλείʔυ
  50. HTTP εςʔλείʔυ ׬શʹཧղͨ͠ʁ