HTTPリダイレクトの実態(301 vs 302 vs 307)

一般的なHTTPリダイレクトステータスコードの機能と使用例を説明します:│ 301 (Moved Permanently) (恒久的に移動)、302 (Found/Temporarily Moved) (一時的に移動)、および 307 (Temporary Redirect) (一時的なリダイレクト)。

Beginner

HTTPリダイレクトは、ユーザーや検索エンジンを、当初リクエストしたURLとは異なるURLへ誘導する方法です。これはサーバーが特定のHTTPステータスコードをクライアント(ブラウザ)に送信することで実現され、クライアントは新しいURLへ新たなリクエストを行うよう指示されます。

各タイプの動作は以下の通りです:

1. 301 Moved Permanently(恒久的な移動)

  • 目的: リクエストされたリソースが新しいURLへ恒久的に移動したことを示します。
  • 動作: ブラウザは自動的に新しいURLへリダイレクトし、重要な点として、通常このリダイレクトをキャッシュします。 これにより、元のURLへの後続のリクエストは、古いURLを経由せずに直接新しいURLに到達します。検索エンジンもインデックスを更新し、新しいURLを指すようになります。
  • メソッドの変更: 元のリクエストで使用されたHTTPメソッド(例:GET、POST)は、リダイレクト後のリクエストでPOSTからGETに変更される場合がありますが、現代のブラウザは301リダイレクトではメソッドを保持することが多いです。
  • 使用例: ページに新しい恒久的なアドレスがある場合、ドメイン名を変更する場合、または HTTPS を強制する場合。

2. 302 Found (一時的に移動)

  • 目的: 要求されたリソースが一時的に別の URL に存在することを示します。 サーバーは、クライアントが今後のリクエストで元のURLを使い続けることを期待します。
  • 動作: ブラウザは新しいURLにリダイレクトしますが、リダイレクトをキャッシュしません。元のURLへの今後のリクエストは依然として元のサーバーに送信され、そのサーバーが再度302リダイレクトを発行します。検索エンジンは通常、302リダイレクトに対してインデックスを更新しません。
  • メソッド変更: 従来、ブラウザはリダイレクト後のリクエストにおいて、元のメソッドがPOSTであってもHTTPメソッドをPOSTからGETに変更していました。この動作は現在も一般的です。
  • 使用例: A/Bテスト、一時的なランディングページ、またはリソースが通常の場所では一時的に利用できない場合。

3. 307 一時的リダイレクト

  • 目的: 302と同様に、要求されたリソースが一時的に別のURLにあることを示します。主な違いはHTTPメソッドの扱い方です。
  • 動作: ブラウザは新しいURLへリダイレクトし、リダイレクトをキャッシュしない
  • メソッド保持: 重要な点として、307リダイレクトは元のリクエストで使用されたHTTPメソッド(例: GET、POST、PUT)がリダイレクト先リクエストでも明示的に保持されることを保証する。 元のリクエストがPOSTだった場合、リダイレクト先のリクエストもPOSTになります。
  • 使用例: 一時的なリダイレクトが必要で、フォーム送信時など元のHTTPメソッドの保持が重要な場合。メソッド保持が重要である場合、302よりも意味的に正しい代替手段です。