SlideShare a Scribd company logo
1 of 76
告白に学ぶ
HTTP Status Code
- エラー編 -
2017/10/05
PHPカンファレンス2017
@takapyyy
※多分最後まで
いかないので
人材募集してます!
デザイナ/エンジニア
@東京 @名古屋 @大阪
※多分最後まで
いかないので
● REST APIで真価を発揮!適切に使い分けよう!
● 扱う側の扱いやすさを考えよう!
● 伝えきれないことはメッセージに含めよう!
まとめ
HTTP Status Code
HTTPにおいてWebサーバからのレスポンスの意味
を表現する3桁の数字からなるコードで、RFC 2616、
RFC 7231等によって定められている。
参考:https://ja.wikipedia.org/wiki/HTTPステータス
コード
HTTP Status Code
HTTPにおいてWebサーバからのレスポンスの意味
を表現する3桁の数字からなるコードで、RFC 2616、
RFC 7231等によって定められている。
参考:https://ja.wikipedia.org/wiki/HTTPステータス
コード
Laravelでいうところのこれ
Route::get('home', function () {
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});
Laravelでいうところのこれ
Route::get('home', function () {
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});
ざっくり
1xx Information
リクエストは受け取られ
た。
処理は継続される。
2xx Success
リクエストは受け取られ、
理解され、受理された。
3xx Redirection
リクエストを完了させる
ために、追加的な処理が
必要。
4xx Client Error
クライアントからのリク
エストに誤りがあった。
5xx Server Error
サーバがリクエストの処
理に失敗した。
ざっくり
1xx Information
リクエストは受け取られ
た。
処理は継続される。
2xx Success
リクエストは受け取られ、
理解され、受理された。
3xx Redirection
リクエストを完了させる
ために、追加的な処理が
必要。
4xx Client Error
クライアントからのリク
エストに誤りがあった。
5xx Server Error
サーバがリクエストの処
理に失敗した。
こんないっぱい
覚えられないよ...
そんなあなたに!
はい!お願いします///あっ、あの!
付き合って下さい!
サーバークライアント
はい!お願いします///
OKです!あっ、あの!
付き合って下さい!
OKの例
OKです!
Response
はい!お願いします///
Request
あっ、あの!
付き合って下さい!
OKの例
※多分最後まで
いかないので
おもんないやつは
とばします
1xx
Information
継続。
クライアントはリクエストを継続できる。サーバが
リクエストの最初の部分を受け取り、まだ拒否して
いないことを示す。
100 Continue
話があるんだけ
ど!
100 Continue
ほほう、それでそ
れで?
2xx
Success
200 OK
OK。
リクエストは成功し、レスポンスとともに要求に応
じた情報が返される。
はい!
お願いします///
付き合って下さ
い!
200 OK
3xx
Redirection
300 Multiple Choices
複数の選択。
リクエストしたリソースが複数存在し、ユーザやユ
ーザーエージェントに選択肢を提示するときに返さ
れる。
佐藤さん2人いる
んだよね
どっち?
佐藤さん付き合っ
て下さい!
300 Multiple Choices
こっから
本編!
4xx
Client Error
こっちが悪い
400 Bad Request
リクエストが不正である。
定義されていないメソッドを使うなど、クライアン
トのリクエストがおかしい場合に返される。
ごめんなさい
ちゃんと目をみて
告白してくれなき
ゃイヤ!
付き合って下さ
い!
400 Bad Request
401 Unauthorized
認証が必要である。
Basic認証やDigest認証などを行うときに使用される。
おまえに娘はやら
ん!
娘さんを下さい!
401 Unauthorized
402 Payment Required
支払いが必要である。
現在は実装されておらず、将来のために予約されて
いるとされる。
この壷買ってくれ
る?♡
付き合って下さ
い!
402 Payment Required
403 Forbidden
禁止されている。
リソースにアクセスすることを拒否された。リクエ
ストはしたが処理できないという意味。アクセス権
がない場合や、ホストがアクセス禁止処分を受けた
場合などに返される。
娘とは接近禁止じゃ!
二度とくんじゃねえ!
娘さんに会わせて
下さい!
403 Forbidden
404 Not Found
未検出。
リソースが見つからなかった。
単に、アクセス権がない場合などにも使用される。
...おかけになった電話番号は
現在使われておりません...
もしもし、俺やけ
ど
最近げんき?
404 Not Found
405 Method Not Allowed
許可されていないメソッド。
許可されていないメソッドを使用しようとした。
例えば、POSTメソッドの使用が許されていない場
所で、POSTメソッドを使用した場合に返される。
(そういうのは直
接会っていってほ
しいな)、っと
(ポチポチ
(付き合って下さ
い!)、っと(ポ
チポチ
405 Method Not Allowed
406 Not Acceptable
受理できない。
Accept関連のヘッダに受理できない内容が含まれて
いる場合に返される。
私はあなたに似合
う人じゃないわ。。
付き合って下さ
い!
406 Not Acceptable
407 Proxy Authentication Required
プロキシ認証が必要である。
プロキシの認証が必要な場合に返される。
ごめんなさい
先にけいこちゃん
に聞いてからにし
て><
付き合って下さ
い!
407 Proxy Authentication Required
❤
❤
友
408 Request Timeout
リクエストタイムアウト。
リクエストが時間以内に完了していない場合に返さ
れる。
はよいえ
....付き合
408 Request Timeout
409 Conflict
競合。
要求は現在のリソースと競合するので完了できない。
ごめんね。
私、カレシいるん
だ...
付き合って下さ
い!
409 Conflict
消滅した。
リソースは恒久的に移動・消滅した。どこに行った
かもわからない。
404 Not Foundと似ているが、こちらは二度と復活
しない場合に使われる。
410 Gone
(あの子はも
う...)
付き合って下さ
い!
410 Gone
前提条件で失敗した。
前提条件が偽だった場合に返される。
412 Precondition Failed
私、年上好きって
いったぢゃん。。
おねえさん!
付き合って下さい!
412 Precondition Failed
ペイロードが大きすぎる。
リクエストエンティティがサーバの許容範囲を超え
ている場合に返す。
例:アップローダの上限を超えたデータを送信しよ
うとした。
413 Payload Too Large
なげえ
...
413 Payload Too Large
突然呼び出してごめんね。
今日いい天気だよね。あ
っ、こんなことがいいた
いんじゃなくて、ここ数
日けいこのこと考えたら
寝れなく日々が続いちゃ
ってさwこんなん言われ
てもきもいよねwでもそ
れくらい俺がけいこのこ
と考えてるのはわかって
ほしい。かわいいし優し
いしいつも笑顔で俺は癒
やされててずっと一緒に
いたいなって思っちゃっ
て...。毎日気づいたら目
私はティーポット。
エイプリルフールネタ。
418 I’m a tea pot.
私はティーポット
なのよ
コーヒーいれても
良い?
418 I’m a teapot
PSR-8 Mutually Assured Hug
Mutually Assured Hug (相互高信頼性ハグ)
この標準は、オブジェクトが互いの感謝と支持を表
明するための、一般的な方法を確立します。
これでオブジェクトは、建設的な方法で互いをサポ
ートすることができ、異なるPHPプロジェクト間の
協力を促進します。
https://qiita.com/tanakahisateru/items/3f24014a91744c2b04fe
PSR-8 Mutually Assured Hug
法的理由により利用不可。
403 Forbiddenから派生したステータスコード。
451 Unavailable For Legal Reasons
法律はまだそこま
でいってないんで
すよ
Hey!! Siri!!
付き合って下さ
い!
451 Unavailable For Legal Reasons
5xx
Server Error
こっちが悪い
サーバ内部エラー。
サーバ内部にエラーが発生した場合に返される。
例として、CGIとして動作させているプログラムに
文法エラーがあったり、設定に誤りがあった場合な
どに返される。
500 Internal Server Error
ごめん、ちょっと
今体調悪くて...
付き合って下さ
い!
500 Internal Server Error
不正なゲートウェイ。
ゲートウェイ・プロキシサーバは不正な要求を受け
取り、これを拒否した。
502 Bad Gateway
けいこちゃん?
もういないわよ...?
けいこさん!付き
合って下さい!
502 Bad Gateway
Proxyみたいなやつ
サービス利用不可。
サービスが一時的に過負荷やメンテナンスで使用不
可能である。例として、アクセスが殺到して処理不
能に陥った場合に返される。
503 Service Unavailable
アッ...アッ...ツキアッテクダサイ!!
ツキアッテクダサイ!!
ツキアッテクダサイ!!
ツキアッテクダサイ!!
503 Service Unavailable
ゲートウェイタイムアウト。
ゲートウェイ・プロキシサーバはURIから推測され
るサーバからの適切なレスポンスがなくタイムアウ
トした。
504 Gateway Timeout
けいこちゃんから
返事がないわ。ご
めんなさい
けいこさん!
付き合って下さ
い!
504 Gateway Timeout
< おっおねg...
Proxyみたいなやつ
懇親会で
お会いしましょう!!

More Related Content

What's hot

MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法
佐久本正太
 

What's hot (20)

React(TypeScript) + Go + Auth0 で実現する管理画面
React(TypeScript) + Go + Auth0 で実現する管理画面React(TypeScript) + Go + Auth0 で実現する管理画面
React(TypeScript) + Go + Auth0 で実現する管理画面
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法
 

Similar to 20171005 告白に学ぶ http status code

about Thrift
about Thriftabout Thrift
about Thrift
Naoya Ito
 

Similar to 20171005 告白に学ぶ http status code (20)

Thrift
ThriftThrift
Thrift
 
about Thrift
about Thriftabout Thrift
about Thrift
 
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
 
Apexで作成したrest apiをしっかり保護する方法
Apexで作成したrest apiをしっかり保護する方法Apexで作成したrest apiをしっかり保護する方法
Apexで作成したrest apiをしっかり保護する方法
 
RとWeb API
RとWeb APIRとWeb API
RとWeb API
 
Php初心者セッション2014ppt
Php初心者セッション2014pptPhp初心者セッション2014ppt
Php初心者セッション2014ppt
 
2009 PHP初心者
2009 PHP初心者2009 PHP初心者
2009 PHP初心者
 
Phpcon2001 in tokyo
Phpcon2001 in tokyoPhpcon2001 in tokyo
Phpcon2001 in tokyo
 
Restful Web Service Ch2
Restful Web Service Ch2Restful Web Service Ch2
Restful Web Service Ch2
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
 
IETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpIETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjp
 
Php s1
Php s1Php s1
Php s1
 
勉強会資料①
勉強会資料①勉強会資料①
勉強会資料①
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
REST 入門
REST 入門REST 入門
REST 入門
 
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
 

More from Shinichi Takahashi

フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320
Shinichi Takahashi
 

More from Shinichi Takahashi (18)

BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略
BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略
BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略
 
(Un)ManagedBlockchain
(Un)ManagedBlockchain(Un)ManagedBlockchain
(Un)ManagedBlockchain
 
ここがつらいよ サーバーレス
ここがつらいよ サーバーレスここがつらいよ サーバーレス
ここがつらいよ サーバーレス
 
「関心事」と「責務」 の お話
「関心事」と「責務」 の お話「関心事」と「責務」 の お話
「関心事」と「責務」 の お話
 
ぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまで
 
フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320
 
AWS新サービス活用事例
AWS新サービス活用事例AWS新サービス活用事例
AWS新サービス活用事例
 
PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!
 
Let’s make elastic cms together!
Let’s make elastic cms together!Let’s make elastic cms together!
Let’s make elastic cms together!
 
事例から見るTwilio活用法
事例から見るTwilio活用法事例から見るTwilio活用法
事例から見るTwilio活用法
 
PHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さPHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さ
 
♡PHPが恋しい話♡
♡PHPが恋しい話♡♡PHPが恋しい話♡
♡PHPが恋しい話♡
 
IoTの原点
IoTの原点IoTの原点
IoTの原点
 
Web開発の 今までとこれから
Web開発の 今までとこれからWeb開発の 今までとこれから
Web開発の 今までとこれから
 
EC-CUBE3プラグイン仕様
EC-CUBE3プラグイン仕様EC-CUBE3プラグイン仕様
EC-CUBE3プラグイン仕様
 
Symfonyコンポーネントで生まれ変わるEC-CUBE
Symfonyコンポーネントで生まれ変わるEC-CUBESymfonyコンポーネントで生まれ変わるEC-CUBE
Symfonyコンポーネントで生まれ変わるEC-CUBE
 
難しいよね、コードレビュー
難しいよね、コードレビュー難しいよね、コードレビュー
難しいよね、コードレビュー
 
日常に見るUI/UX
日常に見るUI/UX日常に見るUI/UX
日常に見るUI/UX
 

20171005 告白に学ぶ http status code