どこへ案内された?
303 は「依頼そのものは受け取った。結果を見たければ、別の URL に GET でアクセスしてね」というサインです。 渡り廊下で先生が「アンケート用紙はあちらの机の上に置いておくから、回答を確認したい人はあそこに見に行ってね」と教えてくれる——あの「結果は別の場所」の案内に似ています。
POST でフォームを送ったあとに、サーバーが完了ページへ GET でリダイレクトさせる Post-Redirect-Get (PRG) パターンの主役。これにより、ユーザーがリロードしても二重送信にならない、クリーンな遷移を作れます。
渡り廊下からのひとこと
授業のアンケートを集めたあと、先生は答えのまとめを別の掲示板に貼ります。「提出はこの机だけど、結果は廊下の掲示板で見てね」と分けることで、提出と確認が混ざらない。あとから何度でも安全に見に行ける。
303 もこの考え方を Web に持ち込んだサインです。「データの送信先」と「結果の取得先」を意識的に分けることで、リロード問題や二重操作を防げる。アプリケーションの安全な動線を作る要のステータスです。
たどり着くまで
案内に従うときの一歩:
LocationのURLへ GET で移動:メソッドは GET に変わる仕様- 元のリクエストは完了とみなす:再送せずに次のページへ
- フォーム送信後は 303 を選ぶ習慣:PRG パターンで二重送信を防ぐ
- API でも完了→確認の分離を意識 (管理者向け):操作と確認を別 URL に分ける設計が安全
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 303 See Other
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>303 See Other</h1></body></html>