HTTPQUERY
日本語

307 Temporary Redirect

使い方

307 Temporary Redirect ステータスコードは、ターゲットリソースが別の URL で利用可能であることを示します。クライアントは Location ヘッダーで指定された URL へ新しいリクエストを行い、リクエストメソッドを変更することは許されません。これは、クライアントが POST から GET へ切り替えることを認める 302 ステータスコードとは異なります。

リクエストメソッドを変更する挙動が望ましい場合は、303 ステータスコードが推奨される代替手段です。たとえば、POST によるフォーム送信を確認ページへリダイレクトする場合は、303 とそれに続く GET を使います。

クライアントは、まったく同じメソッド、ヘッダー、ボディを新しい URL に対して繰り返さなければなりません。サーバーはリダイレクトされたリクエストを通常どおり処理します。307 Temporary Redirect は永続的ではないため、今後のリクエストは元の URL を使い、一時的な変更を再確認することが期待されます。

恒久版の対応物は 308 で、リクエストメソッドを同じように保持しますが、移動が恒久的であることを示し、クライアントは保存しているリンクを更新します。

このレスポンスはデフォルトではキャッシュ可能ではありません。リダイレクトをキャッシュ可能にするには、Cache-Control または Expires ヘッダーを追加します。

307 Temporary Redirect ステータスコードは、Strict-Transport-Security ヘッダーや HSTS プリロードリストを通じて HSTS ポリシーが宣言されている場合の内部リダイレクトとしても機能します。クライアントはサーバーに問い合わせることなく、HTTP から HTTPS を用いた安全な接続へのリダイレクトにこのステータスコードを使用します。

注意

ブラウザは HSTS によって HTTP を HTTPS へ引き上げる際、DevTools に「307 Internal Redirect」を生成します。このリダイレクトは完全にブラウザ内で起こり、ネットワークリクエストは発生しません。DevTools には Non-Authoritative-Reason: HSTS ヘッダーが表示されます。HTTP と HTTPS のあいだで 307 のリダイレクトループが生じる場合は、HSTS とサーバー側のリダイレクトルールが衝突していることを示します。サーバーが HTTP のポートでのみリダイレクトするようにしてください。

注意

303 は元のメソッドにかかわらず後続のリクエストに GET を強制するため、POST 後のリダイレクトの標準となっています。307 は元のメソッドとボディを保持します。クライアントは同じ POST/PUT/PATCH を新しい URL へ再送信します。

SEO への影響

Google は 307 を、リダイレクト先が優先される URL であるという弱いシグナルとして扱います。これは強いシグナルである 301/308 とは異なります。Google は参照元か参照先のいずれかの URL をインデックスします。307 を長期間そのままにしておくと、最終的に恒久的なリダイレクトとして扱われることがあるため、恒久的な変更には 308 のほうが適しています。

例

クライアントがリソースを要求し、そのリソースが別の場所で利用可能であるため、サーバーは 307 Temporary Redirect で応答します。

リクエスト

GET /news.html HTTP/1.1
Host: example.com

レスポンス

HTTP/1.1 307 Temporary Redirect
Location: http://example.com/breaking/news.html

コードリファレンス

.NET

HttpStatusCode.TemporaryRedirect

Rust

http::StatusCode::TEMPORARY_REDIRECT

Rails

:temporary_redirect

Go

http.StatusTemporaryRedirect

Symfony

Response::HTTP_TEMPORARY_REDIRECT

Python3.5+

http.HTTPStatus.TEMPORARY_REDIRECT

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_TEMPORARY_REDIRECT

Angular

@angular/common/http/HttpStatusCode.TemporaryRedirect