HTTPステータスコード302 Foundは、ウェブにおけるURLリダイレクトを実現する上で広く用いられる手法の一つです。このステータスコードは、HTTP/1.0仕様(RFC 1945)において初めて定義され、その際の説明文は「Moved Temporarily(一時的に移動)」でした。その後、現在の「Found」という名称に変更されました。
302ステータスコードを含むHTTPレスポンスは、Locationヘッダーフィールドにリダイレクト先のURLを含んでいます。これにより、Webブラウザなどの
ユーザーエージェントは、Locationヘッダーで指定された新しいURLに対して、自動的に2回目のリクエストを送信します。結果として、ユーザーは新しいURLにリダイレクトされることになります。
しかし、初期のWebブラウザの実装には、HTTPの仕様に沿わない部分がありました。特に、POSTメソッドで送信されたリクエストを、リダイレクト時にGETメソッドに変更してしまうという問題が頻繁に発生しました。このような実装上の曖昧さを解消するため、HTTP/1.1(RFC 2616)では、新たにステータスコード303と307が導入されました。
303 See Other: リダイレクト先へのリクエストは、必ずGETメソッドで行うべきであることを明示します。
307 Temporary Redirect: リダイレクト時にも、元のリクエストメソッドを保持することを規定します。つまり、POSTリクエストが送信された場合は、リダイレクト先にもPOSTリクエストが送信されます。
これらの新しいステータスコードによって、リダイレクト時の挙動がより明確化されたものの、HTTP/1.1の仕様に準拠していない古いブラウザとの互換性を維持する必要性から、302ステータスコードは依然として広く使用されています。多くのウェブフレームワークやアプリケーションで、302リダイレクトが活用されており、その挙動を正確に理解しておくことは、ウェブ開発において非常に重要です。
クライアントのリクエスト例:
POST /old-url HTTP/1.1
Host: example.com
...
サーバーの応答例:
HTTP/1.1 302 Found
Location: /new-url
...
関連項目:
HTTPステータスコード
参考文献:
RFC 1945:
Hypertext Transfer Protocol -- HTTP/1.0
* RFC 2616:
Hypertext Transfer Protocol -- HTTP/1.1