ブラウザはどのくらいの期間HTTP 301をキャッシュしますか?


380

HTTP 301 Permanent Redirectの問題をデバッグしています。簡単なテストの後、Safariは再起動時に301のキャッシュをクリアするようですが、Firefoxはクリアしません。

IE、Chrome、Firefox、Safariはいつ301のキャッシュをクリアしますか?

更新:たとえば、にリダイレクトexample1.comしたいexample2.comが、誤ってにリダイレクトするように設定した場合example3.com、これは問題です。私は間違いを修正できますが、それまでにアクセスしたことのあるユーザーはすべて、example1.comへの誤ったリダイレクトをキャッシュしているexample3.comため、キャッシュがクリアされるまで、example1.comまたはexample2.comそのどちらにも到達できません。調査の結果、私はそこにはなかったことがわかりませんCache-Controlし、Expiresヘッダを設定します。不適切な301応答のヘッダーは次のようになります。

HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html

私自身のテストはそれを示しています:

  • IE7、IE8、Android 2.3.4はまったくキャッシュしません。
  • Firefox 18.0.2、Safari 5.1.7(Windows 7)、およびOpera 12.14はすべてのキャッシュを使用し、ブラウザーの再起動時にキャッシュをクリアします。
  • IE10とChrome 25はキャッシュしますが、ブラウザーの再起動時にクリアされないので、いつクリアされますか?

7
私たちはこの301地獄の穴から抜け出す道を必要とするクロムを教えてください:bugs.chromium.org/p/chromium/issues/...
BT

@BT問題はすべてのブラウザーに影響するため、実際にはIETFのみがこれを修正できます。おそらく、TTLのないキャッシュされた301にいくつかの必須タイムアウトを定義することにより、ブラウザーは最終的にキャッシュされた仮定を再検証します。
McGuireV10 2017年

1
IETFメーリングリストでこれについての議論を始めました。まだこの問題をフォローしている人がいると感じた場合は、lists.w3.org
Public

回答:


299

少なくとも2つのブラウザー-ChromeとFirefox-は、有効期限なしで 301リダイレクトをキャッシュします

つまり、ブラウザのキャッシュが対応できる限り、キャッシュされたままになります。手動でキャッシュをクリアした場合、または新しいエントリのためのスペースを空けるためにキャッシュエントリがパージされた場合、キャッシュから削除されます。

これは、少なくともFirefox about:cacheでディスクキャッシュの下に移動して見つけることで確認できます。

IE10 / IE11などの他のブラウザーの動作については知りません。ただし、他のブラウザでは無期限にキャッシュされるため、とにかくこれに対応する必要があります。

Chrome / Firefoxを含むすべてのブラウザで、以下に説明するように、ヘッダーを使用してこのデフォルトの動作をオーバーライドすることが可能です。

注:この回答は2014年に作成されたものであり、ブラウザの動作は時間とともに変化する可能性があります。

リダイレクトをキャッシュしたくない場合

この無期限キャッシングは、Cache-Controlヘッダーがない場合のこれらのブラウザーによるデフォルトのキャッシングにすぎません。ロジックは、「永続的な」リダイレクトを指定し、他のキャッシュ指示を与えないことです。そのため、無期限にキャッシュしたいかのように扱われます。

ブラウザーが指定されている場合、他の応答と同様に、ブラウザーは引き続きCache-ControlおよびExpiresヘッダーを受け入れます。

次のようなヘッダを追加することができCache-Control: max-age=3600たりExpires: Thu, 01 Dec 2014 16:00:00 GMT、あなたの301リダイレクトします。Cache-Control: no-cacheブラウザで永続的にキャッシュされないように、またはブラウザCache-Control: no-storeで一時的なストレージに保存できないように追加することもできます。

しかし、私の意見ではより良い代替手段は、302または307リダイレクトを使用することです。これらは、ブラウザまたはキャッシュが「永続的な」リダイレクトであることを意味するものではないため、Cache-Controlヘッダーがない場合はキャッシュすべきではありません。

私には、301リダイレクトを発行するように見えますが、技術的に有効であるとしても、それをキャッシュ不可としてマークすることは、301リダイレクトの趣旨に反することになります。YMMV、そして「永久的な」リダイレクトが時間制限を持つことが理にかなっているエッジケースを見つけるかもしれません。

以前に301リダイレクトを発行したが、元に戻したい場合

ブラウザーにキャッシュされた301リダイレクトが残っている場合、ソースページにリダイレクトがまだあるかどうかに関係なく、引き続きターゲットページに移動します。これを修正するためのオプションは次のとおりです。

  • 最も簡単で最適な解決策は、もう一度301リダイレクトを再度発行することです。

    ブラウザは、以前は廃止されたU​​RLであると考えられていたものにリダイレクトされていることを認識します。これにより、そのURLが再度フェッチされ、古いリダイレクトがまだないことが確認されます。

    編集:いくつかのコメントはこれに疑問を投げかけます。以下を参照してください。

  • 以前のリダイレクトターゲットの移動先のサイトを制御できない場合は、運がいいです。サイトの所有者に、リダイレクトして戻ってくるように頼んでください。

また、予防は治療よりも優れています。古いURLを永久に廃止するかどうかわからない場合は、301リダイレクトを避けてください。


18
また、ブラウザが元のURLを再取得することで永続的な循環リダイレクトを処理することを示す参照がありますか?
ケビンクリストファーヘンリー

7
301リダイレクトバックが機能せず、ブラウザが古い301リダイレクトをキャッシュし、無限ループが表示される
Yuriy Kolodovskyy '

5
私がテストした方法:少し前に、301をにリダイレクトしhttp://www.SOMEHOST.comましたhttps://www.SOMEHOST.com。しかし、今http://www.SOMEHOST.comはサイトのプライマリホストである必要があります。したがって、httpsからhttpへのリダイレクトは削除されました。ご覧のとおり、301からhttps://www.SOMEHOST.comにリダイレクトしましたがhttp://www.SOMEHOST.com、ループが表示されています。ブラウザは再フェッチしませんでした...
Yuriy Kolodovskyy 2014年

8
(明らかに)最初の301リダイレクトを削除していれば、リダイレクト(私の場合はPHPリダイレクトを使用)がGoogle Chromeで完全に機能することを確認しました。
Vincent Poirier 2017年

15
リダイレクトバックが完全に機能することを確認できます。リダイレクトループを検出したブラウザは、キャッシュエントリを無効にします。IE11、Firefoxの52、Safariの10、クロム57でテスト
Munhitsu

258

Chrome 71から

永続的なリダイレクトをクリアするには、chrome:// settings / clearBrowserDataにアクセスし、そこから「キャッシュされた画像とファイル」をクリアするだけでリダイレクトがクリアされます。

クロム48-70

chrome:// net-internalsにアクセスします。上部の赤いステータスバーの右側にある下矢印▼をクリックしてドロップダウンメニューを開き、[ツール]グループで[キャッシュをクリア]を選択します。

バージョン48の時点で、これは私がキャッシュされた301をクリアするために機能した唯一のものでした。


14
Chromeバージョン54以降、残念ながらこれは機能しません。
pwagner

4
考え直したところ、「ブラウザが301をキャッシュする期間」という本当の質問には実際には答えませんでした。私の答えは、301を完全に元に戻すための何らかの方法が必要になる可能性がある公開サイトをリダイレクトしたユーザーには役立ちません。実際にいくつのブラウザがリダイレクトをキャッシュしたかを知らずに-他の回答は部分的にそのシナリオに対処しています。私の回答は、影響を受けるすべてのユーザーと通信できる開発者またはイントラネットのシナリオにのみ役立ちます。
McGuireV10 2017年

1
Chromeバージョン68.0.3440.106(公式ビルド)で動作
Thum Choon Tat

12
chrome:// net-internalsはChrome 71に組み込まれています。ドロップダウン/ツールセクションはなくなりました。DNS> Host resolver cache> Clear host cacheボタンがありますが、これはキャッシュされた301を削除するためには機能しません。
t-jam

52
Chrome 71では、chrome:// settings / clearBrowserDataを使用し、そこから「キャッシュされた画像とファイル」をクリアするだけでリダイレクトがクリアされました。
Bemmu

179

必死にリダイレクトキャッシュを取り除きたい人を助ける答え:

Chromeは、301リダイレクトを無限に(ローカルディスクキャッシュに)キャッシュします。このキャッシュをクリアするには:

  • DevToolsを開きます(を押しますF12
  • [ ネットワーク ]タブで、[ キャッシュを無効にする ]チェックボックスをオンにします
  • DevToolsを開いたままにし、ページをリロードします(を押しますF5

すべて問題がない場合は、[キャッシュを無効にする]をオフにすると、すべてが期待どおりに機能します。


14
これは機能し、キャッシュを再度有効にした後でもリダイレクトはなくなります。THX!
migg 2016

2
これは、ローカルのhostsファイルを介して127.0.0.1を指すドメインでは機能していないようです。この場合の他のオプションはありますか?
pwagner

リダイレクトが意図せずに、localhost:8000からlocalhost(ポート80)などの別のポートを指している場合は機能しません。また、localhostとlocalhost:8000の両方からサイト/アプリケーションデータ全体をクリアしましたが、どちらもこの助けにはなりませんでした。
Dennis98 2017年

3
このソリューションは、2019年11月16日バージョン78.0.3904.97以降のChromeで動作します。他のソリューションは使用できなくなりました。正常に機能したら、開発者ツールを閉じることができます。
Peter Wooster

受け入れられた答え。
Aysennoussi

43

ユーザーにそのURLで投稿フォームを送信させると、キャッシュされたリダイレクトはなくなります:)

<body onload="document.forms[0].submit()">
<form action="https://forum.pirati.cz/unreadposts.html" method="post">
    <input type="submit" value="fix" />
</form>
</body>

2
これが私がそれを外すために見つけた最良の方法であることに同意します。
esjay 2018

他の回答とは異なり、この方法は開発者コンソールを開かずに他の人の問題を解決するのに適しています!ありがとう
Alexey Rytikov

4
fetch( 'URL'、{method: 'POST'})は、同じ方法でトリックを行う必要があります。ありがとう!これで頭痛が軽減しました。
calvin

これが私に有効な唯一の方法であるとは信じられません(他のすべてのメソッドを最初に試しました-クロスサイトセキュリティポリシーのためにコンソールのfetch()も失敗しました)。
user36388

24

301HTTP RFCごとのキャッシュ可能な応答であり、ブラウザーは応答にあるHTTPキャッシングヘッダーに応じてそれをキャッシュします。FireBugまたはCharlesを使用して応答ヘッダーを調べ、応答がキャッシュされる正確な期間を確認します。

キャッシュ期間を制御したい場合は、HTTP応答ヘッダーCache-Controlを使用Expiresして同じことができます。または、301応答をまったくキャッシュしたくない場合は、次のヘッダーを使用します。

Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT

12
技術的には正しいですが、あなたの答えはユーザーの質問には答えません。したがって、私がここに来た質問には答えません。ブラウザーに既に存在する、キャッシュされていないヘッダー付きの301は、メインブラウザーで期限切れになりますか?
2013

誰もがまだ興味を持っている場合は、このリンク命令は301のキャッシュを切り替えることができます
サンフランシスコPresencia

リンクはFF用であり、私には機能しませんでした。ウェブ開発者の拡張1.2.5をインストールし、FF 23.0.1を使用して
プー

質問は答えられませんでした。問題は、有効期限が指定されていない場合にリダイレクトがキャッシュされる期間です
Dennis Flagg 2014年

21

httpリダイレクトのブラウザキャッシュを削除する非常に簡単な方法があります(301、307など)。

Chromeの開発者コンソールでネットワークパネルを開くことができます。ネットワークコールを選択します。それを右クリックし、[ ブラウザのキャッシュクリア ]をクリックして、キャッシュされたリダイレクトを削除します。

ネットワーク呼び出しのコンテキストメニュー


1
どうもありがとうございました!シンプルなソリューションと働きました!この方法は、将来的にも機能するはずです。
sgon00

16

確認しました!! ユーザーに影響を受けるURLへの投稿リクエストを送信させ、キャッシュされたリダイレクトは忘れられます。

次のことができる場合は、ブラウザコンソールにこれを入力するのが簡単です。

fetch('example.com/affected/link', {method: 'post'}).then(() => {})

影響を受けるブラウザを知っている場合(特に開発中)に役立ちます。

または、前の301リダイレクトページにアクセスできる場合は、このスクリプトをページに追加できます。ページにアクセスすると、キャッシュされた301は忘れられます。


これは上記の投稿フォームに似ていますが、手間がかかりません。
jpswade

正しい@jpswade
Emeke Ajeh

12

私に役立つ答えを投稿します:

URLに移動:

chrome://settings/clearBrowserData

ポップアップを呼び出す必要があります。

  • 選択のみ:cached images and files
  • 時間ボックスを選択: from beginning

Chrome 79で動作します!
webaholik

Chrome 80で作業していただきありがとうございます。
ジョセフ

6

@thomasrutterの答えとして

以前に301リダイレクトを発行したが、元に戻したい場合

ブラウザーにキャッシュされた301リダイレクトが残っている場合、ソースページにリダイレクトがまだあるかどうかに関係なく、引き続きターゲットページに移動します。これを修正するためのオプションは次のとおりです。

最も簡単で最適な解決策は、もう一度301リダイレクトを再度発行することです。

ブラウザは、以前は廃止されたU​​RLであると考えられていたものにリダイレクトされていることを認識します。これにより、そのURLを再度フェッチして、古いリダイレクトがまだないことを確認します。

以前のリダイレクトターゲットの移動先のサイトを制御できない場合は、運がいいです。サイトの所有者に、リダイレクトして戻ってくるように頼んでください。

実際、これは次のことを意味します。

  1. a.com 301からb.com

  2. a.comの301を削除

  3. b.com 301をa.comに追加

その後、動作します。


2
しかし、それでもb.comの301が横になっています:(-汚い修正
BT

1
別のページから別の301を発行してリダイレクトをクリアできますか?例(a.com301-> b.com)(a.com301を削除)(a.com/abcdefg301を追加-> a.com)、クライアントにa.com/abcdefg何らかの方法で強制的に表示させますか?
nemec

うまくいきました!IE11、Firefox 52、Safari 10、Chrome 57でテスト済み
Munhitsu 2017

a.comとb.comの両方を使用したい状況がありました。したがって、b.com 301 a.comはオプションではありませんでした。私たちの解決策はHTTPSに移行すること
でした-HTTPSでの

6

IE、Chrome、FFを含むすべての主要なブラウザー(最新バージョン)で機能するシンプルなソリューションがあります

  1. Ctrl + Shift + Del
  2. -
    1. Chrome:[閲覧の履歴]と[キャッシュ...]を選択します
    2. IE:デフォルトのオプション「インターネット一時ファイルとWebサイトファイル」、「CookieとWebサイトデータ」、「履歴」をそのままにします
    3. FF:「閲覧とダウンロードの履歴」、「キャッシュ」
  3. 「削除」をクリック
  4. ブラウザを閉じて再度開きます。うまくいくはず

また、ブラウザによっては開いているページからキャッシュされたアイテムを消去しないため、問題のページにアクセスしていないことを確認する必要があります。
Oliver Schimmer

6

(キャッシュされたリダイレクトを回避するため)テスト目的のために、人々は開くことができる新しいプライベートウィンドウを:クリックしCTRL+SHIFT+N、[Mozillaを使用する場合、使用P]


これは、おそらく「プライベートウィンドウ」の主な約束がキャッシュへの書き込みではないが、引き続きそれらの読み取り/再利用が可能であるために下げられました。しかし、Firefox 37.0.1(Linux)では私にとってこれは機能し、非常に迅速で便利でした。プライベートウィンドウは、Webサーバーの現在/キャッシュされていない設定を反映していますが、通常のブラウザタブは、キャッシュされた301リダイレクトを使用します。
alfonx

alfonx:サーバーの所有者がCookieのように要素を使用してそのユーザーの以前のIDを明らかにできるため、プライベートウィンドウはキャッシュを再利用しない場合があります。キャッシュを再利用することはポルノを嫌う妻に対しておそらく安全であることを認めなければならないが。
Zdenek、

6
これは、すでにキャッシュされた301がある場合は機能しません。プライベートは、キャッシュされたリダイレクトを実際に使用します。
jeffmcneill

1

incognito / InPrivateモードを使用してリダイレクトをテストします。ブラウザを閉じると、キャッシュがフラッシュされ、ウィンドウを再度開いたときにキャッシュが含まれなくなります。


1

他の答えが示すように。キャッシングはブラウザで不明確な場合があります。これは非常に危険です。だからそれをしないでください。少なくともキャッシュヘッダーを追加します。htaccessで私は常にこの方法でこれを行います。

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
  # The E=nocache:1 sets the environment variable nocache to the value of one
  RewriteRule ^/?(.*) https://www.example.org/$1 [L,R=301,E=nocache:1]
</IfModule>


<IfModule mod_headers.c>
  ## Set the response header if the "nocache" environment variable is set
  ## in the RewriteRule above.
  Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache

  ## Set Expires too ...
  Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</IfModule>

1

localhostアドレスの問題を解決するために、サイトが実行されているポート番号を変更しました。これはChromeバージョン73.0.3683.86で機能しました。


-1

最新のGoogle Chromeバージョン79では、chrome:// net-internals を使用して左側のパネルからDNSを選択し、[ホストのキャッシュを消去]ボタンをタップできます

net-internalsページを開いているChromeのスクリーンショット


なぜこれが反対票を投じられるのかわからないが、Http 301はDNSホストキャッシュ関連の問題である
Mohammad Ersan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.