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