クライアントは異なる振る舞いをすることになっていますか? どのように?
6 に答える
ステータス 301 は、リソース (ページ) が新しい場所に完全に移動されたことを意味します。クライアント/ブラウザは、元の場所を要求しようとするのではなく、新しい場所を使用する必要があります。
ステータス 302 は、リソースが一時的に別の場所にあることを意味し、クライアント/ブラウザは元の URL を引き続き要求する必要があります。
ほとんどの場合、301 対 302 は検索エンジンでのインデックス作成に重要です。検索エンジンのクローラーはこれを考慮し、301 を使用するときに PageRank を転送するためです。
詳細については、 Peter Lee の回答を参照してください。
301 は、要求されたリソースに新しい永続的な URI が割り当てられており、このリソースへの今後の参照は、返された URI のいずれかを使用して行う必要があることを示します。
302 は、要求されたリソースが別の URI に一時的に存在することを意味します。
リダイレクトは場合によって変更される可能性があるため、クライアントは今後のリクエストに対して引き続き Request-URI を使用する必要があります。
この応答は、Cache-Control または Expires ヘッダー フィールドで示されている場合にのみキャッシュ可能です。
301 リダイレクトは無期限にキャッシュされます (少なくとも一部のブラウザーでは)。
つまり、301 を設定すると、そのページにアクセスすると、リダイレクトされるだけでなく、そのリダイレクトがキャッシュされます。
そのページに再度アクセスすると、ブラウザー* はその URL を要求することさえせず、キャッシュされたリダイレクト ターゲットに移動するだけです。
キャッシュでリダイレクトされた訪問者の 301 を元に戻す唯一の方法は、元の URL** にリダイレクトし直すことです。その場合、ブラウザはループに気付き、最終的に入力された URL を実際に要求します。
明らかに、完全に制御できない Facebook やその他のリソースに 301 を送信することにした場合、それはオプションではありません。
残念ながら、多くのホスティング プロバイダーは、301 リダイレクトを行う「リダイレクト」と呼ばれる機能を管理インターフェイスで提供しています。これを使用してドメインを facebook に一時的にリダイレクトし、近日公開予定のページとして使用している場合、基本的に失敗です。
* How long do browsers cache HTTP 301s?によると、少なくとも Chrome と Firefox 。. Chrome 45 で試してみました。編集: Mac 上の Safari 7.0.6 もキャッシュします。ブラウザを再起動しても問題は解決しませんでした (Link によると、Windows 上の Safari 5 では有効であるとのことです)。
window.location = ''
**ほとんどの場合に適用できるソリューションであるため、javascript を試しましたが、機能しません。検出されない無限ループが発生します。ただし、phpheader('Location: new.url')
はループを壊します
結論: 301 は、その URL を二度と使用しないことが確実な場合にのみ使用してください。通常、ルート ディレクトリ (example.com/) にはありません。
301 の主な問題は、サーバー レベルでリダイレクトを無効にした場合でも、ブラウザーがリダイレクトをキャッシュすることです。
短いメンテナンス ウィンドウでリダイレクトを有効にする場合は、常に 302 を使用することをお勧めします。