Как долго браузеры кэшируют HTTP 301? - PullRequest
319 голосов
/ 03 февраля 2012

Я отлаживаю проблему с постоянным перенаправлением HTTP 301. После быстрого тестирования кажется, что 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 кешируются, но не очищаются при перезапуске браузера, так когда они очистятся?

Ответы [ 13 ]

1 голос
/ 26 марта 2019

Чтобы решить проблему с адресом локального хоста, я изменил номер порта, под которым работал сайт. Это работало на Chrome версии 73.0.3683.86.

1 голос
/ 19 ноября 2018

Как показывают другие ответы. Кеширование может быть неопределенным в браузере. Это чрезвычайно опасно. Так что не делай этого. По крайней мере, добавьте заголовки кэша. В 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 голос
/ 23 марта 2018

Проверьте свои перенаправления, используя режим инкогнито / InPrivate, поэтому при закрытии браузера он очищает этот кэш, и повторное открытие окна не содержит кеш.

...