302 Found
使い方
302 Found ステータスコードを受け取ったとき、クライアントは要求したリソースが一時的に移動したと理解します。2回目のリクエストで新しい場所からリソースを取得します。クライアントが内部リンクを更新することは期待されないため、301 より単純です。
注意
後方互換性のため、クライアントはリダイレクト時にリクエストメソッドを POST から GET へ変更することが認められています。曖昧さをなくすには、サーバーが代わりに別のステータスコードを返します。303 ステータスコードはリダイレクトで GET メソッドを使わなければならないことを示し、307 ステータスコードは元のメソッドの保持を要求します。
302 レスポンスの一般的なきっかけには、HTTP から HTTPS への移行(多くの場合 301 のほうが適切です)、URL の正規化(末尾のスラッシュ)、A/B テスト、位置情報に基づくコンテンツのルーティング、一時的なメンテナンス用リダイレクトがあります。
注意
302 はエラーではなく、成功したリダイレクトです。サーバーはリソースを見つけており、クライアントを現在の場所へ誘導しています。意図しない 302 リダイレクトを解消するには、そのリダイレクトが意図的なものかを確認し、移動が恒久的であれば 301 に変換し、意図しないルールがないか CMS の設定や .htaccess を確認します。
キャッシュ可能性
302 レスポンスはデフォルトではキャッシュ可能ではありません。301 や 308 とは異なり、302 がキャッシュに保存されるには明示的な Cache-Control または Expires ヘッダーが必要です。
SEO への影響
Google は 302 を、リダイレクト先が優先される URL であるという弱いシグナルとして扱います。これは強いシグナルである 301 とは異なります。Google は参照元か参照先のいずれかの URL を処理します。302 を長期間そのままにしておくと、最終的に恒久的なリダイレクトとして扱われることがあるため、恒久的な変更には 301 のほうが適しています。
例
クライアントが一時的に移動したリソースを要求します。サーバーは新しい場所を示し、クライアント側での表示に適したメッセージを提供します。
リクエスト
GET /news.html HTTP/1.1
Host: example.com
レスポンス
HTTP/1.1 302 Found
Location: http://example.com/testing/news.html
Content-Type: text/html
Content-Length: 167
<h1>The Newsfeed has moved</h1>
<body>
The site is under development and the newsfeed has
temporarily moved to
<a href=/testing/news.html>here</a>.
</body>
コードリファレンス
.NET
HttpStatusCode.Found
Rust
http::StatusCode::FOUND
Rails
:found
Go
http.StatusFound
Symfony
Response::HTTP_FOUND
Python3.5+
http.HTTPStatus.FOUND
Java
java.net.HttpURLConnection.HTTP_MOVED_TEMP
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_MOVED_TEMPORARILY
Angular
@angular/common/http/HttpStatusCode.Found