HTTP 301 Moved Permanently:意味とは
結論
HTTP 301 Moved Permanently は、要求されたリソースに別の URL への恒久的なリダイレクトが設定されていることを意味します。通常、リダイレクト先は `Location` レスポンスヘッダーで示されます。301 はそのレスポンスを受け取った特定のリクエストに適用されるものであり、それだけで Web サイト全体がダウンしていることを意味するわけではありません。設定を変更する前に、正確な URL、HTTP メソッド、レスポンスヘッダー、リダイレクト先を確認してください。
要点
- HTTP 301 は要求されたリソースに対する恒久的なリダイレクトであり、サイト全体の障害を自動的に意味するものではありません。
Locationヘッダーには通常、クライアントが次にアクセスすべき場所が示されます。キャッシュ関連ヘッダーや認証関連ヘッダーと併せて確認してください。- DNS 解決や TLS ネゴシエーションが成功していても、HTTP リクエストが 301 レスポンスを受け取ることがあります。
- 正規 URL、HTTP から HTTPS への切り替え、ホスト名の変更、認証フロー、アプリケーションのルーティングなどを理由に、意図的にリダイレクトされることがあります。
- サイト所有者は設定を変更する前に、レスポンスを生成したのが Web サーバー、アプリケーション、リバースプロキシ、CDN、WAF のどれかを特定する必要があります。
- 修正後は同じ URL とメソッドでテストし、関連するルートが意図したステータスを返し続けることを確認してください。
Site Administrator
このエラーの意味と見分け方
- ブラウザー、API クライアント、監視サービス、HTTP チェッカーなどで
301 Moved Permanentlyが報告される。 - ブラウザーがリダイレクトを自動的に追従したり、別の URL を表示したり、リダイレクト先が元の URL に戻ることでリダイレクトループを示したりする。
- レスポンスに、リダイレクト先を含む
Locationヘッダーが含まれることがある。 - 1 つの URL、ホスト名、HTTP メソッド、認証状態、ユーザーエージェント、ネットワーク経路でのみ発生することがある。
- エンドポイントが HTTP レスポンスを返しているため、DNS は正常に解決され、TLS も正常に完了する場合がある。
- API クライアントや自動化ツールは、リダイレクト設定によっては 301 で停止し、リダイレクト先へ進まないことがある。
可能性の高い順の主な原因
- 意図的な URL の正規化: サイトが別のホスト名、パス、末尾スラッシュの有無、その他の URL の形式を、優先するアドレスへリダイレクトしている。
- プロトコルまたはホスト名の移行: HTTP トラフィックを HTTPS へリダイレクトしている、または古いホスト名を移行先のホスト名へ転送している。
- アプリケーションまたはフレームワークのルーティング: パスの変更、ログイン状態の変更、リソースの移動後に、アプリケーションがルートをリダイレクトしている。
- Web サーバー、リバースプロキシ、CDN のルール: インフラストラクチャの設定が、リクエストをアプリケーションへ到達させる前にリダイレクトを適用している。
- キャッシュされたリダイレクト: 設定変更が反映される間、ブラウザー、中間キャッシュ、CDN が以前にキャッシュしたリダイレクトを返し続けている。
- メソッド固有の挙動: ブラウザーのナビゲーションには適切なリダイレクトルールが、API リクエストやリクエストのセマンティクスを維持する必要があるメソッドには適さないことがある。
- 予期しないルールまたは競合するルール: 複数のレイヤーが異なる宛先へリダイレクトし、チェーンやループを作っている。
修正方法
サイトを訪問している場合
- ホスト名、パス、プロトコルを含め、正確なアドレスを確認します。宛先が見慣れたもので、想定どおりの場合にのみリダイレクトに従ってください。
- 宛先でアカウントが必要な場合は、サイトの通常のインターフェースからサインインして再試行します。見慣れないリダイレクト先のドメインに認証情報を入力しないでください。
- ブラウザーが目的のページに到達するなら、301 は設計どおりに機能している可能性があります。ループする、誤ったホストに到達する、存在しないページで終わる場合は、元の URL と宛先を記録します。
- API または自動化クライアントでは、リダイレクトに従う設定になっているか、リダイレクト後の URL が同じリクエストメソッドと認証コンテキストで有効かを確認します。
- 元の URL、宛先、おおよその時刻、クライアントの種類、確認されたステータスをサイト所有者に報告します。パスワード、Cookie、API シークレットは共有しないでください。
サイトを所有または管理している場合
- 正確なリクエストを再現します。HTTP メソッド、完全な URL、ホスト、プロトコル、該当する場合は認証状態、最終ステータス、各リダイレクト先を記録します。
- レスポンスヘッダーを確認します。特に
Location、キャッシュ関連ヘッダー、認証関連ヘッダー、プロキシやサーバーレイヤーを識別できるヘッダーを確認してください。 - 301 を生成したコンポーネントを特定します。アプリケーション、Web サーバー、リバースプロキシ、CDN、WAF のどれかを確認し、リクエスト時刻と、利用可能ならリクエスト ID を使って該当するログを調べます。
- 実際の挙動を意図したルーティング設計と比較します。ホスト名の変更、HTTP から HTTPS へのポリシー、正規パス、移動したリソース、アプリケーションフローのどれを処理するリダイレクトなのか確認します。
- リダイレクトチェーン、ループ、競合するルール、誤った宛先がないか確認します。最近のデプロイと、ルーティング、認証、キャッシュ、プロキシ、CDN の設定変更を確認してください。
- レスポンスを生成したレイヤーに対して、権限のある最小限の修正を行います。1 つのルートまたは条件が誤っている場合に、権限、セキュリティ、リダイレクトルールを広範囲に変更することは避けてください。
- 適切なクライアントから同じ URL とメソッドで再テストします。その後、宛先、重要な関連ルート、認証済みと未認証の該当ケースをテストします。
- キャッシュされたリダイレクトが疑われる場合は、承認済みのキャッシュ無効化手順に従い、その変更による運用上の影響を考慮してから実施します。
予防と修正確認
- 意図的なリダイレクトについて、旧 URL、宛先、影響を受けるメソッド、担当者を含めて定義・文書化します。
- Web サーバー、アプリケーション、リバースプロキシ、CDN、WAF のルールは、対応している場合はバージョン管理します。
- リリース後に、正規 URL、HTTP から HTTPS への挙動、ホスト名の変更、重要な API メソッド、認証が必要なルートをテストします。
- すべての 301 を障害として扱うのではなく、ルートやデプロイごとにリダイレクト率、チェーン、ループを監視します。
- 予期しないリダイレクトを照合できる期間、リクエストログとインフラストラクチャログを保持します。
- リダイレクトルールを変更する際は、古いレスポンスが修正結果を隠さないよう、キャッシュの挙動を確認します。
外部の助けが必要なタイミング
予期しない 301 が重要な公開ルートに影響する場合、ループや長いチェーンを生成する場合、ユーザーを信頼できないホストや誤ったホストへ誘導する場合、多数のユーザーに影響する場合、または安全に検証できない認証、セキュリティ、プロキシ、CDN、サーバー設定の変更が必要な場合は、エスカレーションしてください。サニタイズしたリクエストの詳細、リダイレクト先、タイムスタンプ、レスポンスヘッダー、関連ログを提供します。パスワード、Cookie、API キー、その他のシークレットは決して共有しないでください。
よくある質問
HTTP 301 は Web サイト全体がダウンしていることを意味しますか?
いいえ。301 は特定の HTTP リクエストに対するレスポンスを示します。サイトの他の部分が動作している一方で、1 つの URL、ホスト名、メソッド、クライアント、認証状態にのみ影響することがあります。
301 レスポンスの Location ヘッダーは何をしますか?
通常、クライアントが次にリクエストすべき URL を示します。その宛先について、正しいホスト、プロトコル、パスになっているかを確認し、チェーンやループがないか調べてください。
HTTP 301 が返されても DNS と TLS は正常なことがありますか?
はい。DNS の正常な解決と TLS ネゴシエーションは、エンドポイントが返す HTTP ステータスとは別のものです。301 は、HTTP に対応するエンドポイントがリダイレクトを返したことを示します。
ブラウザーは 301 に従うのに、API クライアントは従わないのはなぜですか?
ブラウザーはナビゲーション中にリダイレクトへ自動的に従うことが一般的ですが、API クライアントではリダイレクト追従を有効にする必要がある場合や、アプリケーションが宛先を明示的に処理できるよう停止する場合があります。クライアントのリダイレクト動作と、宛先で必要なメソッドおよび認証要件を確認してください。
恒久的なリダイレクトを別のステータスコードに変更すべきですか?
自動的に変更すべきではありません。まず、意図したリソースの関係、リクエストメソッド、クライアントの挙動を確認してください。リダイレクトのステータスを変更すると、ナビゲーション、キャッシュ、クライアント、検索エンジンの処理に影響する可能性があるため、ルーティング設計上必要な場合にのみ変更します。
サイト所有者が最初に確認すべきことは何ですか?
正確なリクエストを確認して Location ヘッダーを調べ、次にどのレイヤーがレスポンスを生成したかを特定し、該当するログと照合します。設定を編集する前に、最近のルーティング、プロキシ、アプリケーション、キャッシュの変更を確認してください。
関連ドキュメント
- MDN Web Docs: 301 Moved Permanently — ステータスコードと HTTP における挙動のリファレンス。
- RFC 9110: HTTP Semantics — HTTP レスポンスのセマンティクスとリダイレクト動作に関する標準仕様。