はじめに
Railsを勉強している中で status オプションが出てきたので、整理してまとめてみます。
:statusオプションは一言でいうと、
HTTPレスポンスのステータスコードを指定するためのオプションです。
Railsではコントローラでレスポンスを返すときに使って、
「このリクエストは成功なのか?エラーなのか?リダイレクトなのか?」みたいな意味をクライアントに伝える役割があります。
本記事では、クライアントエラーレスポンス(HTTP 400番台)のHTTPステータスコードの意味と、それを表すシンボルについてまとめていきたいと思います。
他のHTTP レスポンスステータスコードはこちら
・情報レスポンス編
・成功レスポンス編
・リダイレクトメッセージ編
・サーバーエラーレスポンス編
status: :bad_request
HTTPステータスコード :400
「リクエストの書き方や内容が間違っている」という意味
⇒クライアント:リクエストを送る
⇒サーバー:「内容がまちがって、処理できない」というときに送る。
status: :unauthorized
HTTPステータスコード :401
「まだ認証(ログインなど)が済んでいない状態」を示す。
⇒クライアント:ログインせずにページへアクセス
⇒サーバー:「このページはログインが必要だよ」と伝えるために送る。
status: :payment_required
HTTPステータスコード :402
⇒クライアント:ウェブページを閲覧する
⇒サーバー:「このページを閲覧するには支払いが必要だよ」と伝えるために送る。
多くのサイトでは直接的な課金を要求する前に、ログインや登録を促すメッセージを表示することが一般的
status: :forbidden
HTTPステータスコード :403
「ログインはしているけど、アクセスする権限がない状態」という意味
⇒クライアント:管理者ページにアクセス
⇒サーバー:「あなたにはこの権限はないよ」ということを伝える
status: :forbidden
HTTPステータスコード :404
「指定されたページやデータが存在しない」という意味。
⇒クライアント:URLにアクセス
⇒サーバー:「その場所には何もないよ」と伝える時に送る。
status: :method_not_allowed
HTTPステータスコード :405
「URLは合ってるけど、リクエストの方法が間違っている」という意味。
⇒クライアント:「このデータ削除して!(DELETE)」とリクエスト
⇒サーバー:「削除は許可してないよ」と伝える時に送る。
status: :not_acceptable
HTTPステータスコード :406
「欲しい形式や条件に合うデータが見つからない」とう意味。
⇒クライアント:「JSONでちょうだい」とリクエスト
⇒サーバー:「HTMLしかないよ」というときに送る。
status: :proxy_authentication_required
HTTPステータスコード :407
「目的のサーバーに行く前に、途中のサーバーで認証が必要である」という意味。
⇒クライアント:サイトを訪れる
⇒サーバー:「先に認証してね」と伝えるときに送る。
status: :request_timeout
HTTPステータスコード :408
「リクエストが遅すぎてタイムアウトした」という意味。
⇒クライアント:サーバーに接続、でもリクエストをなかなか送らない
⇒サーバー:「待ち時間オーバー」と、判断したときに送る。
status: :conflict
HTTPステータスコード :409
「他の変更と衝突していて、そのままでは処理できない状態」という意味。
⇒ユーザー1:データAを編集
⇒ユーザー2:データAを編集
⇒サーバー:「内容が競合しているから、そのままじゃ処理できないよ」という意味
status: :gone
HTTPステータスコード :410
「以前はあったけど、今は完全に消えている」という意味。
⇒クライアント:ページにアクセス
⇒サーバー:「そのページはもう削除されて、どこにもないよ」と伝えるとき送る。
status: :gone
HTTPステータスコード :411
「送るデータの長さ情報がないから処理できない」という意味。
⇒クライアント:データを送る
⇒サーバー:「サイズ分からないと困るよ」というときに送る。
status: :precondition_failed
HTTPステータスコード :412
「リクエストに付けた条件が、サーバーの状態と合っていない」という意味。
⇒クライアント:このファイルが前と同じ状態なら上書きする
⇒サーバー:「他の人が先に更新したから使えない」と伝えるときに送る。
status: :payload_too_large
HTTPステータスコード :413
「送ってきたデータが大きすぎて受け取れないよ」という意味。
⇒クライアント:大きなファイルを送信
⇒サーバー:「サイズ制限を超えて処理できないよ」と伝えるときに送る。
status: :uri_too_long
HTTPステータスコード :414
「URLが長すぎてエラーになっている状態」という意味。
⇒クライアント:長いURLでリクエストする
⇒サーバー:「長すぎて扱えないよ」と伝えるときに使用する。
status: :unsupported_media_type
HTTPステータスコード :415
「送ったデータの形式がサーバーに合っていない」という意味。
⇒クライアント:データを送る(例:XML)
⇒サーバー:「このデータの形式に、対応していないよ」と伝えるときに使用する。
status: :range_not_satisfiable
HTTPステータスコード :416
「欲しい範囲を指定していたけど、その範囲がズレているよ」という意味。
⇒クライアント:「このファイルの100〜200バイトだけちょうだい」とリクエスト
でも実際のファイルは50バイトしかない
⇒サーバー:「その範囲は存在しないよ」と伝えるときに使用する。
status: :expectation_failed
HTTPステータスコード :417
「リクエストに書かかれた期待を、満たすことができなかった」という意味。
⇒クライアント:「こういう条件で処理してね」
⇒サーバー:「その期待には応えられないよ」と伝えるときに使う。
status: :misdirected_request
HTTPステータスコード :421
「リクエスト先のサーバーを違っている」という意味。
⇒クライアント:リクエストを送る
サーバーは、そのURLやドメインに対応していない
⇒サーバー:「送るサーバー間違えてるよ」と伝えるときに使用する。
status: :unprocessable_entity
HTTPステータスコード :422
「リクエストの形式は正しいけど、内容が間違っている」という意味。
⇒クライアント:データを送る(形式はOK)
⇒サーバー:「この内容じゃ処理できないよ」と言うときに送る。
status: :locked
HTTPステータスコード :423
「他の人や処理が使っているので、操作できないよ」という意味。
⇒クライアント:ファイルを編集しようとする
しかし、誰かがファイルを編集中
⇒サーバー:「他の人が使っているので、操作できないよ」と伝えるときに使う。
status: :failed_dependency
HTTPステータスコード :424
「前の処理が失敗したので、この処理もできないよ」という意味。
⇒クライアント:ファイルを編集しようとする
しかし、その前の処理(例:ロック取得や認証)が失敗
⇒サーバー:「前の処理が失敗しているので、この操作はできないよ」と伝えるときに使う。
status: :upgrade_required
HTTPステータスコード :426
「プロトコルをアップグレードする必要がある」という意味。
⇒クライアント:リクエストを送る(HTTPなど)
⇒サーバー:「そのプロトコルには対応してないよ」と伝えるときに送る。
status: :precondition_required
HTTPステータスコード :428
「安全に更新するための条件が必要」という意味。
⇒クライアント:データを取得する
⇒サーバー:「確認できる条件を付けてから更新してね」というときに送る。
status: :too_many_requests
HTTPステータスコード :429
「一定時間内のリクエスト回数を超えた」という意味。
⇒クライアント:何度もリクエストを送る
⇒サーバー:「短時間で送りすぎ、少し時間をあけて」と伝えるときに送る。
status: :request_header_fields_too_large
HTTPステータスコード :431
「リクエストのヘッダーサイズが大きすぎる」という意味。
⇒クライアント:リクエストを送る(ヘッダーが大量・巨大)
⇒サーバー:「情報が多すぎて処理できないよ」と伝えるときに送る。
原因:Cookieが増えすぎ、長すぎる認証トークン
status: :unavailable_for_legal_reasons
HTTPステータスコード :451
「法律・規制によってアクセスが制限されている」という意味。
⇒クライアント:ページにアクセスする
⇒サーバー:「このページは法律上の理由で公開できない」と伝えるときに送る。
参考元