HTTPQUERY
日本語

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