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

1.7K Views

March 09, 21

スライド概要

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

profile-image

Tech Hunter代表。フルオタクエンジニア。 エンジニアリングコミュニティ「Easy Easy」運営。 ガジェオタでアニオタでゲーオタ。 たまにブログ書いてる。2児のパパ。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
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レスポンス レスポンスメッセージは大きく3種類の情報に分けられる ステータスライン (プロトコル, ステータスコード, テキストフレーズ) HTTPレスポンスヘッダ HTTPレスポンスボディ

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.

😌

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 ステータスコード 完全に理解した?