Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HTTPステータスコード 完全に理解した
Search
unsoluble_sugar
February 27, 2020
Technology
0
5k
HTTPステータスコード 完全に理解した
『完全に理解した人達の「Web技術」Talk #2 』の発表スライドです
https://easy2.connpass.com/event/167520/
unsoluble_sugar
February 27, 2020
Tweet
Share
More Decks by unsoluble_sugar
See All by unsoluble_sugar
ゆるいエンジニアリングコミュニティはいいぞ
unsoluble_sugar
0
74
Godot Engineについて調べてみた
unsoluble_sugar
0
760
ドキュメント翻訳から始めるOSS推し活
unsoluble_sugar
0
2.3k
VC ClientでRVC完全に理解した / rvc-with-vcclient-completely-understood
unsoluble_sugar
0
1.9k
VCCでVRChatにVRMアバターをアップロードする方法完全に理解した
unsoluble_sugar
0
560
技術選定完全に理解した
unsoluble_sugar
0
550
「未経験からエンジニア」でやり抜いた時の昔話
unsoluble_sugar
0
2.6k
Coursera完全に理解した
unsoluble_sugar
0
4.3k
歴史的経緯から学ぶVTuber超入門
unsoluble_sugar
0
1.2k
Other Decks in Technology
See All in Technology
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
580
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
280
人工衛星のファームウェアをRustで書く理由
koba789
15
8.2k
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.7k
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
370
未経験者・初心者に贈る!40分でわかるAndroidアプリ開発の今と大事なポイント
operando
5
730
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
1.1k
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.3k
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
450
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
380k
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
230
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
420
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
Site-Speed That Sticks
csswizardry
10
820
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
What's in a price? How to price your products and services
michaelherold
246
12k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Building Applications with DynamoDB
mza
96
6.6k
Faster Mobile Websites
deanohume
309
31k
YesSQL, Process and Tooling at Scale
rocio
173
14k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
A Tale of Four Properties
chriscoyier
160
23k
Transcript
HTTPεςʔλείʔυ શʹཧղͨ͠
@unsoluble_sugar TOPGATE, Inc. Leader/Engineer
https://unsolublesugar.com
https://qiita.com/unsoluble_sugar
HTTP εςʔλείʔυ શʹཧղͯ͠·͔͢ʁ
ฉ͍ͨ͜ͱ͋Δ શʹཧղͨ͠ ԿΘ͔Βͳ͍ νϣοτσΩϧ
HTTPεςʔλείʔυͱ • ݫີʹHTTPϨεϙϯεͷεςʔλείʔυ • αʔό͔ΒͷϨεϙϯεͷҙຯΛද͢3ܻͷࣈίʔυͷ͜ͱ • ಛఆͷHTTPϦΫΤετ͕ਖ਼ৗʹ͔ྃͨ͠Λࣔ͢
HTTPϨεϙϯε Ϩεϙϯεϝοηʔδେ͖̏͘छྨͷใʹ͚ΒΕΔ εςʔλεϥΠϯ ʢϓϩτίϧ εςʔλείʔυ ςΩετϑϨʔζʣ )551Ϩεϙϯεϔομ )551ϨεϙϯεϘσΟ
εςʔλείʔυϔομ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
εςʔλείʔυ5ͭͷΫϥεʹྨ 100൪ɿใϨεϙϯε 200൪ɿޭϨεϙϯε 300൪ɿϦμΠϨΫτ 400൪ɿΫϥΠΞϯτΤϥʔ 500൪ɿαʔόΤϥʔ
100൪ ใϨεϙϯε
100൪ • ॲཧ͕ܧଓ͍ͯ͠Δ͜ͱΛࣔ͢ • ΫϥΠΞϯτͦͷ··ϦΫΤετΛܧଓ͢Δ͔ɺαʔόʔͷ ࢦࣔʹैͬͯϓϩτίϧΛΞοϓσʔτͯ͠࠶ૹ৴͢Δ • HTTP/1.0نʹ1xx൪߸ͷఆ͕ٛͳ͍ͨΊɺ100൪͋·Γ ར༻͞Εͳ͍
100൪ • 100 Continue αʔό͕ϦΫΤετͷड৴Λ͠ڋ൱͍ͯ͠ͳ͍ɻΫϥΠΞϯτ ϦΫΤετΛܧଓͰ͖Δ • 101 Switching Protocols
αʔόϓϩτίϧͷΓସ͑Λཁٻ͍ͯ͠Δ
200൪ ޭϨεϙϯε
200 OK • ޭ࣌ʹฦ͢εςʔλείʔυͱͯ͠࠷ଟ༻͞ΕΔ • ϦΫΤετͨ͠ॲཧ͕ޭɺࢦఆͨ͠σʔλͷऔಘʹޭ • GETɿϘσΟʹϦιʔεؚ͕·ΕΔ • PUT,
POSTɿϘσΟʹॲཧ݁Ռؚ͕·ΕΔ
201 Created • POST, PUTɿϦΫΤετ͕ޭ͠Ϧιʔε͕࡞͞Εͨ • POSTͷ߹ϨεϙϯεͷLocationϔομʹURI͕ೖΔ • Ϣʔβʔ৽نొɺը૾ΞοϓϩʔυɺDBͷςʔϒϧՃͳͲ •
ϘσΟʹ৽͘͠࡞ͨ͠ϦιʔεΛೖΕΔ͜ͱ͕ଟ͍͕ɺಛ ʹԿೖΕͳͯ͘ྑ͍
202 Accepted • ϦΫΤετडཧ͞Ε͕ͨɺ·ͩॲཧ͕͍ྃͯ͠ͳ͍ • ϑΝΠϧܗࣜͷมϓογϡ௨ͷϦΫΤετɺόονॲཧ ͳͲɺαʔόଆͰඇಉظʹߦ͏ॲཧ͕͋Δ߹ʹฦ͢
204 No Content • ϨεϙϯεϘσΟ͕ۭͷͱ͖ʹฦ͢ • DELETEͰσʔλআΛߦͬͨࡍʹฦ͢ • POSTͰϑΥʔϜ༰Λૹ৴͕ͨ͠ը໘ߋ৽͕ͳ͍߹ •
PUTPATCHͰਖ਼͘͠σʔλߋ৽͞Εͨ߹ • DELETEҎ֎Ͱ͋·Γ͏͖Ͱͳ͍ͱ͍͏ҙݟ͋Δ
205 Reset Content • ϢʔβʔΤʔδΣϯτͷը໘ΛϦηοτ͢Δ߹ʹฦ͞ΕΔ • 204ͱಉ͘͡ϨεϙϯεϘσΟͳ͠
300൪ ϦμΠϨτ
300 Multiple Choices • ϦΫΤετʹରͯ͠ෳͷϨεϙϯε͕͋Δ͜ͱΛࣔ͢ • બࢶϦϯΫ͢ΔHTML͕ఏࣔ͞ΕɺϢʔβʔΤʔδΣϯτ ϢʔβʔͦΕΒ͔ΒͻͱͭΛબ͢Δ
301 Moved Permanently • ϦΫΤετ͞ΕͨϦιʔεͷURL͕߃ٱతʹมߋ͞Εͨ • WebαΠτͷҠసɺHTTP͔ΒHTTPSͷϦμΠϨΫτͳͲ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ
302 Found • ϦΫΤετ͞ΕͨϦιʔεͷURL͕Ұ࣌తʹมߋ͞Εͨ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ • ࣮ࡍ303ͷ༻్ͰΘΕΔ͜ͱ͕ଟ͘ɺ307ͱͯ͠࠶ఆٛ͞ ΕͨͨΊݱࡏਪ͞Ε͍ͯͳ͍
303 See Other • ϦΫΤετ͞ΕͨϦιʔεΛผͷURIͰऔಘͰ͖Δ͜ͱΛࣔ͢ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ • ϒϥβͷϑΥʔϜ͔ΒPOSTͰॲཧΛߦͬͨϨεϙϯεͱ͠ ͯɺ݁Ռը໘ʹϦμΠϨΫτ͢Δͱ͖ʹ͏
307 Temporary Redirect • Ұ࣌తϦμΠϨΫτ • 302ͷن֨֎ͳ༻๏͕ԣߦͨͨ͠Ί࠶ఆٛͨ͠ͷ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ •
ϢʔβʔΤʔδΣϯτ༻͢ΔHTTPϝιουΛมߋͯ͠ͳ Βͳ͍
308 Permanent Redirect • ߃ٱతϦμΠϨΫτ • 301ͷن֨֎ͳ༻๏͕ԣߦͨͨ͠Ί࠶ఆٛͨ͠ͷ • LocationϔομʹҠಈઌͷURL͕ࣔ͞ΕΔ •
ϢʔβʔΤʔδΣϯτ༻͢ΔHTTPϝιουΛมߋͯ͠ͳ Βͳ͍
400൪ ΫϥΠΞϯτΤϥʔ
400 Bad Request • ϦΫΤετ͕ෆਖ਼ • ఆٛ͞Ε͍ͯͳ͍ϝιουΛͬͨΓɺύϥϝʔλʹؒҧ͍͕ ͋ΔͳͲɺΫϥΠΞϯτͷϦΫΤετ͕͓͔͍͠߹ • ΄͔ʹదͳΫϥΠΞϯτΤϥʔΛࣔ͢εςʔλείʔυ͕ͳ
͍߹ʹ༻͍Δ
401 Unauthorized • ೝূΤϥʔ • ϩάΠϯ͕ඞཁͳϖʔδͰIDύεϫʔυΛؒҧ͑ͨ߹ • ϦΫΤετʹඞཁͳAuthorizationϔομΛؚ·ͳ͍߹ • τʔΫϯ͕ࣦޮɺഁଛ͍ͯ͠ΔͳͲෆਖ਼ͳ߹
403 Forbidden • ೝՄΤϥʔ • ڐՄ͞Ε͍ͯͳ͍ͳͲͷཧ༝ͰΫϥΠΞϯτͷΞΫηεݖݶ͕ ͳ͘ɺαʔό͔ΒͷϨεϙϯε͕ڋ൱͞Εͨ • ಛఆͷIPΞυϨεͷΈ͔ΒΞΫηεͰ͖Δ߹ͳͲʹ༻͍Δ •
401ͱҟͳΓɺΫϥΠΞϯτͷࣝผ͞Ε͍ͯΔ
404 Not Found • ϦΫΤετ͞ΕͨϦιʔε͕ଘࡏ͠ͳ͍ • WebͰසൟʹݟΒΕΔ༗໊ͳΤϥʔεςʔλείʔυͷͻͱͭ • ͦͦURIࣗମ͕ଘࡏ͠ͳ͍ͷ͔ɺऔಘରͷϦιʔε͕ଘࡏ͠ͳ͔ͬ ͨͷ͔ͳͲɺৄࡉใΛࣔ͢ඞཁ͕͋Δ
• ڐՄ͞Ε͍ͯͳ͍ΫϥΠΞϯτ͔ΒϦιʔεͷଘࡏΛӅͨ͢Ίɺ 403ͷ ΘΓʹ404Λฦ͢͜ͱ͋Δ
405 Method Not Allowed • ΤϯυϙΠϯτଘࡏ͢Δ͕ڐՄ͞Ε͍ͯͳ͍HTTPϝιου • GETͰΞΫηεՄೳͳݕࡧAPIΛPOSTͰ༻͠Α͏ͱͨ͠߹ • API͕ϦιʔεͷDELETEΛېࢭ͍ͯ͠Δ߹
408 Request Timeout • ࢦఆ࣌ؒʹϦΫΤετ͕ྃ͠ͳ͔ͬͨ • ChromeɺFirefoxͳͲɺӾཡΛߴԽ͢ΔͨΊͷHTTPࣄલଓ ػೳΛ༻͢ΔϒϥβͰΑ͘༻͞ΕΔ • ճઢͷଓ͕Լ͍ͯ͠Δ߹ͳͲʹൃੜ
409 Conflict • Ϧιʔεͷڝ߹͕ൃੜͨ͠߹ • ͢Ͱʹଘࡏ͢ΔϝʔϧΞυϨεಉҰIDͷϢʔβʔొΛߦ͓ ͏ͱͨ࣌͠ • ۭͰͳ͍σΟϨΫτϦΛআ͠Α͏ͱͨ͠ΓɺϦιʔεͷ໊ લΛ͢ͰʹଞͰΘΕ͍ͯΔͷʹมߋ͠Α͏ͱͨ࣌͠ͳͲ
410 Gone • ϦΫΤετ͞Εͨίϯςϯπ͕αʔό͔ΒӬٱʹআ͞ΕɺసૹઌΞυϨε ͕ͳ͍߹ • 404ͱҧ͍ʮ͔ͭͯଘࡏ͍͕ͯͨ͠ࠓ͏ଘࡏ͍ͯ͠ͳ͍ʯ͜ͱΛද͢ • ظؒݶఆͷϓϩϞʔγϣϯαΠτͳͲͰར༻͢Δ͜ͱΛҙਤ͍ͯ͠Δ •
ϢʔβʔใΛѻ͏APIͰ410Λฦ༷͢ɺݸਓใอޢͷ؍͔Βࢹ ͞ΕΔՄೳੑ͋Δʢআͨ͠ͱ͍͏ใΛอ͍࣋ͯ͠Δ㲈શʹআ͞Εͯ ͍ͳ͍ʣ
413 Payload Too Large • ϦΫΤετϔομɺϘσΟ͕αʔόͰఆΊ͍ͯΔ্ݶΛ͑ͯ ͍Δ͜ͱΛࣔ͢ • ڐ༰αΠζҎ্ͷϑΝΠϧΞοϓϩʔυ͕ߦΘΕͨ࣌ͳͲ •
αʔόίωΫγϣϯΛด͡Δ͔ɺRetry-After ϔομΛฦ͢
414 URI Too Long • ΫϥΠΞϯτ͕ϦΫΤετͨ͠URI͕ɺαʔόͰѻ͑Δ͞Λ ͍͑ͯΔ • ΫΤϦύϥϝʔλʹա͗Δσʔλ͕ࢦఆ͞Εͨ࣌ͳͲ
415 Unsupported Media Type • ϦΫΤετ͞ΕͨσʔλͷϝσΟΞܗࣜʢContent-Typeʣʹ αʔόʔ͕ରԠ͓ͯ͠Βͣɺαʔό͕ϦΫΤετΛڋ൱ͨ͠ • JSONϦΫΤετ͔͠ड͚औΕͳ͍APIʹXML͕ૹΒΕͨɺα ϙʔτ͢Δը૾ܗࣜҎ֎ͷը૾ΛΞοϓϩʔυ͠Α͏ͱͨ࣌͠
ͳͲ
429 Too Many Requests • ΞΫηεճ͕ڐ༰ൣғͷݶքΛ͑ͨ߹ʹฦ͢ • 2012ʹRFC6585Ͱఆٛ͞Εͨ৽͍͠εςʔλείʔυ • Ұఆͷ࣌ؒʹϨʔτϦϛοτΛ͑ΔେྔͷϦΫΤετΛૹ
৴ͨ͠ʢྫɿ1ؒʹ60ճͳͲͷAPIϦΫΤετ੍ݶʣ
500൪ αʔόΤϥʔ
500 Internal Server Error • αʔόଆʹԿΒ͔ͷҟৗ͕ൃੜ͠ਖ਼ৗͳϨεϙϯε͕ฦͤͳ͍ • ʮԿΒ͔ͷҟৗ͕ൃੜ͠·ͨ͠ʯతͳΤϥʔϝοηʔδ͕ฦΔ ͜ͱ͕ଟ͘ɺΫϥΠΞϯτଆͰղܾෆೳ •
΄͔ʹదͳΤϥʔίʔυ͕ͳ͍߹ʹ༻͍Δ • αʔόʔͷΤϥʔϩάΛݟΕݪҼ͕Θ͔Δ͔
502 Bad Gateway • ήʔτΣΠ·ͨϓϩΩγʹ͕ൃੜ͍ͯ͠Δ • ήʔτΣΠͱͯ͠ಈ࡞͢Δαʔό͕ແޮͳϨεϙϯεΛड͚ औͬͨ
503 Service Unavailable • αʔό͕ϦΫΤετΛॲཧ͢Δ४උ͕Ͱ͖͍ͯͳ͍ঢ়ଶ • Ұ࣌తͳΞΫηεूதϝϯςφϯεʹΑΓαʔό͕μϯ͠ ͍ͯΔ • ϝϯςφϯεͷ߹ɺRetry-Afterϔομʹ࠶։༧ఆ࣌ظʢ͓
ΑͦԿඵޙ͔ʣΛؚΊΔ͜ͱͰ͖Δ
504 Gateway Timeout • ήʔτΣΠͱͯ͠ಈ࡞͢Δαʔό͕ࢦఆ࣌ؒʹϨεϙϯε ΛಘΒΕͳ͔ͬͨ • αΠτҠߦͳͲʹΑΔҰ࣌తͳDNSҟৗͷ߹
505 HTTP Version Not Supported • ϦΫΤετͨ͠HTTPϓϩτίϧͷόʔδϣϯʹαʔό͕ରԠ͠ ͍ͯͳ͍
None
·ͱΊ εςʔλείʔυΛҙࣝͨ͠ઃܭΛߦ͏͜ͱͰ αʔόͱΫϥΠΞϯτؒͷ։ൃ͕εϜʔζʹਐΉ ෆదͳεςʔλείʔυΛׂΓͯͯ͠·͏ͱ ΫϥΠΞϯτଆ͕ࠞཚ͠ɺγεςϜશମͷڍಈʹࢧোΛ͖ͨ͢͜ͱ… εςʔλείʔυΛཧղ͢Δ͜ͱͰ ͷΓ͚அ͕͘͢͠ͳΔ
ࢀߟॻ੶ WebΛࢧ͑Δٕज़ ᴷ HTTPɺURIɺHTMLɺͦͯ͠REST ࢁຊཅฏɹஶʢWEB+DB PRESS plusʣ 20104݄ ൃߦ Web
API: The Good Parts ਫ و໌ɹஶʢΦϥΠϦʔδϟύϯʣ 201411݄ ൃߦ
ࢀߟ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εςʔλείʔυ
HTTP εςʔλείʔυ શʹཧղͨ͠ʁ