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

HTTPステータスコード 完全に理解した

HTTPステータスコード 完全に理解した

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

unsoluble_sugar

February 27, 2020
Tweet

More Decks by unsoluble_sugar

Other Decks in Technology

Transcript

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

    View Slide

  2. @unsoluble_sugar

    TOPGATE, Inc.
    Leader/Engineer

    View Slide

  3. https://unsolublesugar.com

    View Slide

  4. https://qiita.com/unsoluble_sugar

    View Slide


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

    View Slide

  6. ฉ͍ͨ͜ͱ͋Δ

    ׬શʹཧղͨ͠
    Կ΋Θ͔Βͳ͍
    νϣοτσΩϧ

    View Slide

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

    View Slide

  8. HTTPϨεϙϯε
    Ϩεϙϯεϝοηʔδ͸େ͖̏͘छྨͷ৘ใʹ෼͚ΒΕΔ
    εςʔλεϥΠϯ

    ʢϓϩτίϧ εςʔλείʔυ ςΩετϑϨʔζʣ
    )551Ϩεϙϯεϔομ
    )551ϨεϙϯεϘσΟ

    View Slide

  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

    View Slide

  10. εςʔλείʔυ͸5ͭͷΫϥεʹ෼ྨ
    100൪୆ɿ৘ใϨεϙϯε
    200൪୆ɿ੒ޭϨεϙϯε
    300൪୆ɿϦμΠϨΫτ
    400൪୆ɿΫϥΠΞϯτΤϥʔ
    500൪୆ɿαʔόΤϥʔ

    View Slide


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

    View Slide

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

    View Slide

  13. 100൪୆
    • 100 Continue

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

    αʔό͸ϓϩτίϧͷ੾Γସ͑Λཁٻ͍ͯ͠Δ

    View Slide


  14. 200൪୆
    ੒ޭϨεϙϯε

    View Slide

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

    View Slide

  16. 201 Created
    • POST, PUTɿϦΫΤετ͕੒ޭ͠Ϧιʔε͕࡞੒͞Εͨ
    • POSTͷ৔߹͸ϨεϙϯεͷLocationϔομʹURI͕ೖΔ
    • Ϣʔβʔ৽نొ࿥ɺը૾ΞοϓϩʔυɺDBͷςʔϒϧ௥ՃͳͲ
    • ϘσΟʹ͸৽͘͠࡞੒ͨ͠ϦιʔεΛೖΕΔ͜ͱ͕ଟ͍͕ɺಛ
    ʹԿ΋ೖΕͳͯ͘΋ྑ͍

    View Slide

  17. 202 Accepted
    • ϦΫΤετ͸डཧ͞Ε͕ͨɺ·ͩॲཧ͕׬͍ྃͯ͠ͳ͍
    • ϑΝΠϧܗࣜͷม׵΍ϓογϡ௨஌ͷϦΫΤετɺόονॲཧ
    ͳͲɺαʔόଆͰඇಉظʹߦ͏ॲཧ͕͋Δ৔߹ʹฦ͢

    View Slide

  18. 204 No Content
    • ϨεϙϯεϘσΟ͕ۭͷͱ͖ʹฦ͢
    • DELETEͰσʔλ࡟আΛߦͬͨࡍʹฦ͢
    • POSTͰϑΥʔϜ಺༰Λૹ৴͕ͨ͠ը໘ߋ৽͕ͳ͍৔߹
    • PUT΍PATCHͰਖ਼͘͠σʔλߋ৽͞Εͨ৔߹
    • DELETEҎ֎Ͱ͸͋·Γ࢖͏΂͖Ͱ͸ͳ͍ͱ͍͏ҙݟ΋͋Δ

    View Slide

  19. 205 Reset Content
    • ϢʔβʔΤʔδΣϯτͷը໘ΛϦηοτ͢Δ৔߹ʹฦ͞ΕΔ
    • 204ͱಉ͘͡ϨεϙϯεϘσΟ͸ͳ͠

    View Slide


  20. 300൪୆
    ϦμΠϨτ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


  27. 400൪୆
    ΫϥΠΞϯτΤϥʔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. 405 Method Not Allowed
    • ΤϯυϙΠϯτ͸ଘࡏ͢Δ͕ڐՄ͞Ε͍ͯͳ͍HTTPϝιου
    • GETͰΞΫηεՄೳͳݕࡧAPIΛPOSTͰ࢖༻͠Α͏ͱͨ͠৔߹
    • API͕ϦιʔεͷDELETEΛېࢭ͍ͯ͠Δ৔߹

    View Slide

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

    View Slide

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

    View Slide

  35. 410 Gone
    • ϦΫΤετ͞Εͨίϯςϯπ͕αʔό͔ΒӬٱʹ࡟আ͞ΕɺసૹઌΞυϨε
    ͕ͳ͍৔߹
    • 404ͱҧ͍ʮ͔ͭͯଘࡏ͍͕ͯͨ͠ࠓ͸΋͏ଘࡏ͍ͯ͠ͳ͍ʯ͜ͱΛද͢
    • ظؒݶఆͷϓϩϞʔγϣϯαΠτͳͲͰར༻͢Δ͜ͱΛҙਤ͍ͯ͠Δ
    • Ϣʔβʔ৘ใΛѻ͏APIͰ410Λฦ͢࢓༷͸ɺݸਓ৘ใอޢͷ؍఺͔Β໰୊ࢹ
    ͞ΕΔՄೳੑ΋͋Δʢ࡟আͨ͠ͱ͍͏৘ใΛอ͍࣋ͯ͠Δ㲈׬શʹ࡟আ͞Εͯ
    ͍ͳ͍ʣ

    View Slide

  36. 413 Payload Too Large
    • ϦΫΤετϔομɺϘσΟ͕αʔόͰఆΊ͍ͯΔ্ݶΛ௒͑ͯ
    ͍Δ͜ͱΛࣔ͢
    • ڐ༰αΠζҎ্ͷϑΝΠϧΞοϓϩʔυ͕ߦΘΕͨ࣌ͳͲ
    • αʔό͸ίωΫγϣϯΛด͡Δ͔ɺRetry-After ϔομΛฦ͢

    View Slide

  37. 414 URI Too Long
    • ΫϥΠΞϯτ͕ϦΫΤετͨ͠URI͕ɺαʔόͰѻ͑Δ௕͞Λ
    ௒͍͑ͯΔ
    • ΫΤϦύϥϝʔλʹ௕ա͗Δσʔλ͕ࢦఆ͞Εͨ࣌ͳͲ

    View Slide

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

    View Slide

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

    View Slide


  40. 500൪୆
    αʔόΤϥʔ

    View Slide

  41. 500 Internal Server Error
    • αʔόଆʹԿΒ͔ͷҟৗ͕ൃੜ͠ਖ਼ৗͳϨεϙϯε͕ฦͤͳ͍
    • ʮԿΒ͔ͷҟৗ͕ൃੜ͠·ͨ͠ʯతͳΤϥʔϝοηʔδ͕ฦΔ
    ͜ͱ͕ଟ͘ɺΫϥΠΞϯτଆͰ͸ղܾෆೳ
    • ΄͔ʹద੾ͳΤϥʔίʔυ͕ͳ͍৔߹ʹ΋༻͍Δ
    • αʔόʔͷΤϥʔϩάΛݟΕ͹ݪҼ͕Θ͔Δ͔΋

    View Slide

  42. 502 Bad Gateway
    • ήʔτ΢ΣΠ·ͨ͸ϓϩΩγʹ໰୊͕ൃੜ͍ͯ͠Δ
    • ήʔτ΢ΣΠͱͯ͠ಈ࡞͢Δαʔό͕ແޮͳϨεϙϯεΛड͚
    औͬͨ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. View Slide

  47. ·ͱΊ
    εςʔλείʔυΛҙࣝͨ͠ઃܭΛߦ͏͜ͱͰ

    αʔόͱΫϥΠΞϯτؒͷ։ൃ͕εϜʔζʹਐΉ
    ෆద੾ͳεςʔλείʔυΛׂΓ౰ͯͯ͠·͏ͱ

    ΫϥΠΞϯτଆ͕ࠞཚ͠ɺγεςϜશମͷڍಈʹࢧোΛ͖ͨ͢͜ͱ΋…
    εςʔλείʔυΛཧղ͢Δ͜ͱͰ

    ໰୊ͷ੾Γ෼͚΍൑அ͕͠΍͘͢ͳΔ

    View Slide

  48. ࢀߟॻ੶
    WebΛࢧ͑Δٕज़ ᴷ HTTPɺURIɺHTMLɺͦͯ͠REST

    ࢁຊཅฏɹஶʢWEB+DB PRESS plusʣ

    2010೥4݄ ൃߦ

    Web API: The Good Parts

    ਫ໺ و໌ɹஶʢΦϥΠϦʔδϟύϯʣ

    2014೥11݄ ൃߦ

    View Slide

  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εςʔλείʔυ

    View Slide


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

    View Slide