Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

@unsoluble_sugar
 TOPGATE, Inc. Leader/Engineer

Slide 3

Slide 3 text

https://unsolublesugar.com

Slide 4

Slide 4 text

https://qiita.com/unsoluble_sugar

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

εςʔλείʔυ͸ϔομ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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

100൪୆ ৘ใϨεϙϯε

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

100൪୆ • 100 Continue
 αʔό͕ϦΫΤετͷड৴Λ͠ڋ൱͍ͯ͠ͳ͍ɻΫϥΠΞϯτ ͸ϦΫΤετΛܧଓͰ͖Δ • 101 Switching Protocols
 αʔό͸ϓϩτίϧͷ੾Γସ͑Λཁٻ͍ͯ͠Δ

Slide 14

Slide 14 text

200൪୆ ੒ޭϨεϙϯε

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

300൪୆ ϦμΠϨτ

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

500൪୆ αʔόΤϥʔ

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

ࢀߟॻ੶ WebΛࢧ͑Δٕज़ ᴷ HTTPɺURIɺHTMLɺͦͯ͠REST
 ࢁຊཅฏɹஶʢWEB+DB PRESS plusʣ
 2010೥4݄ ൃߦ
 Web API: The Good Parts
 ਫ໺ و໌ɹஶʢΦϥΠϦʔδϟύϯʣ
 2014೥11݄ ൃߦ

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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