Slate Errors

Redirection (3xx)

302

Found

— 一時的にあちらにあります

まずは確認: よくある原因 TOP3

  1. メンテナンス時の一時退避ページ
    短期的に別ページへ案内したいとき
  2. ログイン後のリダイレクト
    認証完了後に元のページや次のページへ送る
  3. 古い CGI 時代からの慣例的な使い方
    多くの Web フレームワークが POST 後に 302 で GET に飛ばす

どこへ案内された?

302 は「リソースは確かにあるけれど、いま一時的に別の場所にあるから、そっちを見てね」というサインです。 渡り廊下で先生が「今日だけ職員室は会議で使えないから、用事は図書室で受け付けるよ」と臨時の案内をくれる——あの「今日限りの代替案内」に似ています。

歴史的に最も使われてきた一時リダイレクトで、ログイン後の遷移や POST 後のリダイレクトに広く利用されてきました。ただし「メソッドが変わる/変わらない」の挙動が曖昧だったため、現代では用途に応じて 303 や 307 の使い分けが推奨されます。

渡り廊下からのひとこと

学校では、いつもの教室が使えない日があります。「今日は3年A組は会議室を使うので、休み時間は別の教室で過ごして」と先生が言えば、生徒はその日だけ別の場所に移動し、明日からはまた元の教室に戻ります。臨時の措置だとわかっているから、引っ越したわけじゃない。

302 もそれと同じで、「いまだけ違う場所、次回はまた元のところを試して」という臨時の案内です。クライアントもキャッシュも、原則として元の URL を覚え続けます。

たどり着くまで

案内に従うときの一歩:

  1. Location ヘッダのURLへ移動:そのリクエストはそちらで完了させる
  2. 元の URL は記憶しておく:恒久移動ではないので参照は残す
  3. メソッドの扱いに注意:POST→GET に変わる古い実装が多いため明示的に確認
  4. 用途に応じて 303 や 307 を選ぶ (管理者向け):意図がはっきりするコードに置き換えると安全

実際にはこう見える

$ リクエスト

curl -i https://example.com/some/path

↓ レスポンス

HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html><body><h1>302 Found</h1></body></html>

似ているケース

もっと知りたい