307 Temporary Redirect(スリーゼロセブン テンポラリ リダイレクト)とは | 意味や読み方など丁寧でわかりやすい用語解説
307 Temporary Redirect(スリーゼロセブン テンポラリ リダイレクト)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
一時的なリダイレクト (イッテキナリダイレクト)
英語表記
307 Temporary Redirect (スリーゼロセブン テンポラリー リダイレクト)
用語解説
HTTPステータスコード「307 Temporary Redirect」は、ウェブサーバーがクライアントのリクエストに応答する際に返すコードの一つで、要求されたリソースが一時的に別のURI(Uniform Resource Identifier)へ移動したことを意味する。これはクライアント(主にウェブブラウザ)に対して、元のリクエストメソッド(例えばGETやPOST)を保持したまま、指定された新しいURIへリクエストを再送するよう指示する。このコードの主な目的は、ウェブサイトのメンテナンス、一時的な負荷分散、またはURL構造の一時的な変更など、将来的に元のURIでリソースが再び利用可能になることを前提とした状況で利用される。
詳細について説明する。HTTPステータスコードは、サーバーがクライアントからのリクエストに対してどのような結果を返したかを示す3桁の数字である。その中でも「3xx」のカテゴリはリダイレクション(転送)に関するものであり、クライアントは追加のアクションとして、指定された新しいURIにアクセスする必要があることを示唆する。307 Temporary Redirectが特に重要なのは、その「一時的」な性質と、リクエストメソッドを「厳密に保持する」という点にある。
クライアントがウェブページやAPIエンドポイントに対しリクエストを送信した際に、サーバーが307 Temporary Redirectを返すと、レスポンスヘッダに含まれるLocationフィールドに新しいURIが指定される。クライアントは、元のリクエストで用いたHTTPメソッド(例えば、情報を取得するGET、データを送信するPOST、リソースを作成するPUTなど)と、もし存在すればリクエストボディ(POSTデータなど)をそのまま維持し、Locationヘッダで示された新しいURIへ自動的に再リクエストを送信する。この「メソッドの厳密な保持」は、HTTP/1.1で導入された重要な側面である。以前の「302 Found」ステータスコードは、一時的なリダイレクトを意図していたものの、多くのクライアント実装がPOSTリクエストをGETリクエストに変換してリダイレクト先へアクセスしてしまうという問題があった。これにより、意図しないデータの消失や操作が発生する可能性があった。307は、この問題を解決するために導入され、特にPOSTリクエストのような、データの送信を伴うリクエストにおいて、その意図された動作を確実に保つことを保証する。
「一時的」という性質は、検索エンジン最適化(SEO)やクライアント側のキャッシュ管理にも影響を与える。307リダイレクトは、リソースが永続的に移動したわけではないため、検索エンジンは元のURIのインデックスを維持し、リダイレクト先のURIを一時的な代替とみなす。これは、将来的に元のURIが再び有効になったときに、検索エンジンの評価(PageRankなど)が失われないようにするためである。また、クライアントは元のURIのキャッシュを無効にせず、後でそのURIが再び利用可能になることを期待して保持する傾向がある。
307が使われる具体的なシナリオとしては、以下のようなケースが考えられる。例えば、ウェブサイトが数時間のサーバーメンテナンスに入る場合、訪問者がアクセスした際に一時的に「メンテナンス中」の専用ページに転送する際に307が利用できる。このとき、元のURIの検索エンジンの評価を維持しつつ、ユーザーに適切な情報を提供できる。また、システムの一部が一時的に異なるサブドメインや別のサーバーに移動した場合、あるいはA/Bテストの実施中に特定のリソースを異なるバージョンに振り分ける場合にも、元のURIの信頼性を保ちながら一時的な転送を実現するために307が有効である。
他の主要なリダイレクトコードとの比較も重要である。「301 Moved Permanently」は、リソースが恒久的に新しいURIへ移動したことを示す。この場合、検索エンジンは元のURIの評価を新しいURIへ引き継ぎ、クライアントは新しいURIをキャッシュし、将来のアクセスでは直接新しいURIを使用しようとする。これに対し、307はあくまで一時的な移動であり、元のURIの権威は維持される。「302 Found」との違いは最も繊細であり、前述のように302は歴史的にメソッドの変更を許容する実装が多かったため、HTTP/1.1ではメソッドを厳密に維持する307と、POSTをGETに変換してリダイレクトする「303 See Other」が導入され、302の曖昧さが解消された。現在では、メソッドを厳密に維持したい一時的なリダイレクトには307を、POSTリクエストをGETに変換して転送したい場合には303を使用することが推奨される。
システム開発者や管理者は、リダイレクトを設定する際に、その目的が一時的なものか永続的なものかを正確に判断し、適切なステータスコードを選択する必要がある。不適切なコードの使用は、検索エンジンの評価に悪影響を与えたり、クライアント側のキャッシュが古い情報で更新されてしまったり、予期せぬアプリケーション動作を引き起こしたりする可能性がある。また、リダイレクトループ(例えば、URI AからURI Bへ転送され、URI Bから再びURI Aへ転送されるような無限の循環)が発生しないように、サーバー側の設定には細心の注意を払う必要がある。クライアント側のアプリケーション、特にプログラムでHTTPリクエストを送信する場合には、リダイレクトの自動処理を考慮に入れることが重要である。多くのHTTPクライアントライブラリはデフォルトでリダイレクトを自動的に追跡するが、その動作や追跡するステータスコードの種類を理解しておくことは、予期せぬ問題を避ける上で不可欠である。307 Temporary Redirectは、一時的なリソースの移動を安全かつ確実にクライアントに伝え、ウェブシステムの柔軟性と堅牢性を高めるための重要なツールの一つである。