web-dev-qa-db-ja.com

HTTPリダイレクト:301(一時的)対302(一時的)

クライアントは異なる振る舞いをするはずですか?どうやって?

362
flybywire

ステータス301は、リソース(ページ)が恒久的に新しい場所に移動されたことを意味します。クライアント/ブラウザは、元の場所を要求するのではなく、今後新しい場所を使用するようにします。

ステータス302は、リソースが一時的に他の場所にあることを意味し、クライアント/ブラウザは元のURLを要求し続ける必要があります。

546

検索エンジンスパイダーがウェブページのレスポンスヘッダに301ステータスコードを見つけると、それはこのウェブページがもはや存在しないことを理解し、それに応じてロケーションヘッダを検索して新しいURLを選び、インデックス付きURLを新しいものに置き換えます。 。

そのため、検索エンジンは、存在しなくなった(301見つかった)すべてのインデックス付きURLを新しいURLで更新します。これにより、古いWebページのトラフィックが保持され、新しいページに切り替わります(古いWebページのトラフィックは失われません)。

ブラウザ:ブラウザが301ステータスコードを見つけた場合、古いURLから新しいURLへのマッピングをキャッシュします。キャッシュがクリアされない限り、クライアント/ブラウザは元の場所を要求せずに新しい場所を使用します。

enter image description here

検索エンジンのスパイダーがウェブページのステータスを見つけると(302)、一時的に新しい場所にリダイレクトされ、両方のページをクロールします。古いWebページのURLはまだ検索エンジンデータベースに存在し、常に古い場所を要求してクロールしようとします。クライアント/ブラウザは依然として元の場所を要求しようとします。

enter image description here

asp.netのc#でそれを実装する方法と検索エンジンに与える影響についての詳細を読んでください - http://www.dotnetbull .com/2013/08/301恒久的なvs-302一時的なステータスコードaspnet-csharp-Implementation.html

102
Rohit

彼らのクローラーが301を使用するときこれを考慮に入れてPageRankを転送するので、主に301対302は検索エンジンでのインデックス作成にとって重要です。

詳しくは Peter Leeの答え をご覧ください。

33
Residuum

301は、要求されたリソースに新しい永続URIが割り当てられており、このリソースへの今後の参照は、返されたURIの1つを使用して行われる必要があるということです。

302は、要求されたリソースが一時的に異なるURIの下にあるということです。

リダイレクションは時々変更されるかもしれないので、クライアントは将来のリクエストのためにRequest-URIを使い続けるべきです。

この応答は、Cache-ControlまたはExpiresヘッダーフィールドで示されている場合にのみキャッシュ可能です。

19
Peter Lee

301個のリダイレクトは無期限にキャッシュされます(少なくとも一部のブラウザでは)。

つまり、301を設定してそのページにアクセスすると、リダイレクトされるだけでなく、そのリダイレクトもキャッシュされます。

そのページに再度アクセスしても、ブラウザはそのURLを要求しなくても、キャッシュされたリダイレクト先に送信されるだけです。

Cacheでそのリダイレクトを持つ訪問者の301を元に戻す唯一の方法は、元のURLにリダイレクトし直すことです**。その場合、ブラウザはループに気付き、最後に実際に入力されたURLを要求します。

明らかに、facebookやあなたが完全に管理していない他のリソースに301を決めたのであれば、それは選択肢ではありません。

残念ながら、多くのホスティングプロバイダは、「リダイレクト」と呼ばれる管理インターフェースに301リダイレクトを行う機能を提供しています。近日公開予定のページとしてドメインをFacebookに一時的にリダイレクトするためにこれを使用している場合は、基本的に問題があります。

* によると、少なくともChromeとFirefox。HTTP 301をキャッシュする期間は? 。 Chrome 45で試してみてください。編集:Mac上のSafari 7.0.6もキャッシュされますが、ブラウザの再起動は役に立ちませんでした(Windows上のSafari 5ではLinkが助けになると言います)。

**私はjavascript window.location = ''を試しました。それはほとんどの場合に適用できる解決策になるでしょう - それはうまくいきません。検出されない無限ループが発生します。しかし、php header('Location: new.url')はループを壊します

結論:そのURLを二度と使わないと確信している場合にのみ301を使用してください。通常ルートディレクトリ(example.com/)には決してありません。

16

301の主な問題は、サーバーレベルからリダイレクトを無効にした場合でも、ブラウザがリダイレクトをキャッシュすることです。

短いメンテナンス期間でリダイレクトを有効にしている場合は、常に302を使用することをお勧めします。

8
Jobin Joseph