HTTPリダイレクト:301(永続)と302(一時)


381

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


RFC 2616-HTTPステータスコードそこですべてを繰り返すことができましたが、それはそれを非常に明確に述べています;)
Tiemen

2
仕様には、より微妙な一時的なリダイレクトのための303および307ステータスコードも含まれていることに注意してください。
Patrick McElhaney、2016

303と307はもう必要ありません。303は、新しいURLが関連しているが同等ではないことを指定することになっており、現在の要求がPOSTであってもGETでロードする必要がありますが、ブラウザーはこれをとにかく302で行います。リダイレクトが一時的であるかどうかを指定しなかった302とは対照的に、307はリダイレクトが一時的であることを明示的に指定するはずでしたが、ブラウザーとクローラーはとにかく一時的なものとして302を扱います。
thomasrutter

回答:


569

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

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


12
ありがとうございました。これは、301(永続的)リダイレクトを使用する場合、クライアントが古い場所を二度と取得せず、常に新しいURLを直接使用することを決定できることを意味しますか?
flybywire 2009

18
丁度!実際、仕様によると、クライアントは常に新しい場所に移動する必要があります。
Philippe Leybaert、2009

7
しかし、ブラウザでは、これはどのように影響しますか?たとえば、301で間違った履歴に戻らないように、戻るボタンの履歴を書き換えますか?古いブックマークをクリックすると、301のブックマークを静かに変更しますか?
Xavi Montero 2014

9
@XaviMonteroほとんどの最新のブラウザーは301をキャッシュし、最大6か月間元のソースをまったく要求しません
Jon

34
HTTPステータスコードを覚えてトリック301->パーマと302->温度リダイレクト2つは一時はT.で始まると同じ、Tで始まる
ScottCate

108

検索エンジンスパイダーは、Webページの応答ヘッダーで301ステータスコードを検出すると、このWebページが存在しないことを理解し、応答でロケーションヘッダーを検索して新しいURLを選択し、インデックス付きURLを新しいものに置き換えて、ページランクも転送します。 。

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

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

asp.net c#に実装する方法と、検索エンジンへの影響についての詳細-http ://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html


35

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

詳細については、Peter Leeの回答を参照してください。


20

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

302は、リクエストされたリソースが一時的に別のURIに存在することです。

リダイレクションは時々変更される可能性があるため、クライアントは今後のリクエストに引き続きRequest-URIを使用する必要があります。

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


1
したがって、301は理にかなっていますが、302の適切な使用例を見つけるのに苦労しています。
ボブスタイン

4
@ BobStein-VisiBone(302リダイレクトの例):コード<?php header("location: http://example.com/new.php"); ?>を含むファイルold.phpとファイルnew.php を作成<?php echo 'I am new'; ?>し、リンクに移動します。「I am new」というテキストをリダイレクトして表示します。その後にold.phpでコードを置き換える<?php echo 'I am old'; ?>ともに行くのリンク。「私は古い」というテキストが表示されます。old.phpで301リダイレクトを実行した場合、old.phpのコードを変更した後でも「I am new」というテキストが表示されます。
使徒

2
@ BobStein-VisiBone廃止されたため表示できないページがあります。新しいページを作成する必要がありますが、しばらく準備ができていません。訪問者にとって便利な既存のページへの一時的なリダイレクトを使用します。新しいページが作成されたら、そのページへの永続的なリダイレクトを使用します。
EddieC、2015年

4
302は、リンク先URLが州によって異なる場合に便利です。
ブライアン

7
久しぶりですが、良い例です。通常、ウェブコミックには最新のコミックにつながるURLがあります。それが301でwebcomic.com/latestリダイレクトされる場合webcomic.com/some-comic-title、ブラウザは常に「some-comic-title」にリダイレクトされます。次のコミックが発行され、「最新」が「another-comic-title」にリダイレクトされる場合でも、これは302の方が優れています。
hsan 2017年

17

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

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

再度そのページにアクセスすると、ブラウザー*はそのURLを要求することさえせず、キャッシュされたリダイレクトターゲットに移動するだけです。

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

明らかに、完全に制御されていないFacebookやその他のリソースに301することを決定した場合、これはオプションではありません。

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

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

**私はjavascriptを試しましたwindow.location = ''が、それはほとんどの場合に適用できるソリューションであるため、機能しません。その結果、検出されない無限ループが発生します。ただし、php header('Location: new.url')はループを壊します

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


7

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

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


それは間違いなく「問題」ではありません。それはまさにそれが機能することを意図されている方法です。リダイレクトは、HTTP、HTTPSに、リダイレクトはなど、新しいものにウェブサイトを放棄し、301の通常の使用法のいくつかである
HosseyNJF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.