Я отлаживаю проблему с постоянным перенаправлением 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 кешируются, но не очищаются при перезапуске браузера, так когда они будут очищаться?
Ответы:
По крайней мере два браузера - 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 перенаправление.
Браузер поймет, что его перенаправляют обратно к тому, что он ранее считал списанным URL, и это должно привести к повторной загрузке этого URL, чтобы подтвердить, что старого перенаправления еще нет.
Изменить: некоторые комментарии ставят под сомнение это, см. Ниже.
Если у вас нет контроля над сайтом, на котором находилась предыдущая цель перенаправления, вам не повезло. Попробуйте и попросите владельца сайта перенаправить обратно к вам.
Также профилактика лучше лечения - избегайте перенаправления 301, если вы не уверены, что хотите навсегда снять старый URL-адрес.
источник
http://www.SOMEHOST.com
кhttps://www.SOMEHOST.com
. Но сейчасhttp://www.SOMEHOST.com
должен быть основной хост для сайта. Итак, перенаправление с https на http удалено. Как вы показываете, я сделал перенаправление 301 изhttps://www.SOMEHOST.com
вhttp://www.SOMEHOST.com
, но увидеть цикл. Браузер не перечитал ...Из Chrome 71
Чтобы очистить постоянное перенаправление, перейдите в chrome: // settings / clearBrowserData и оттуда только очистка «кэшированных изображений и файлов» очистит перенаправление.
Хром 48-70
Перейдите в chrome: // net-internals. Справа от верхней красной строки состояния нажмите стрелку вниз ▼, чтобы открыть раскрывающееся меню, и в группе «Инструменты» выберите «Очистить кэш».
Начиная с версии 48, это было единственное, что помогло мне очистить кэшированный 301.
источник
Ответ, который помогает тем, кто отчаянно хочет избавиться от кеша перенаправления:
Chrome кэширует редирект 301 бесконечно (в локальном дисковом кеше). Чтобы очистить этот кеш:
F12
)F5
)Когда все в порядке, вы можете снять флажок «Отключить кэш», и все будет продолжать работать как положено.
источник
localhost:8000
наlocalhost
(порт 80). Я также очистил все данные сайта / приложения от localhost и localhost: 8000, но это не помогло.Заставьте пользователя отправить форму сообщения на этот URL-адрес, и кэшированный редирект исчезнет :)
источник
301
является кешируемым ответом на HTTP RFC, и браузеры будут кешировать его в зависимости от заголовков кэширования HTTP, которые есть в ответе. Используйте FireBug или Charles для проверки заголовков ответов, чтобы узнать точную продолжительность, в течение которой ответ будет кэшироваться.Если вы хотите контролировать продолжительность кэширования, вы можете использовать заголовки HTTP-ответа
Cache-Control
иExpires
сделать то же самое. В качестве альтернативы, если вы вообще не хотите кэшировать301
ответ, используйте следующие заголовки.источник
Существует очень простой способ удаления кэша браузера для http-перенаправлений, например, 301, 307 и т. Д.
Вы можете открыть сетевую панель в консоли разработчика в Chrome. Выберите сетевой вызов. Щелкните правой кнопкой мыши на нем, а затем нажмите Очистить кэш браузера, чтобы удалить кэшированное перенаправление.
источник
Подтверждено !! Сделайте так, чтобы пользователь отправил почтовый запрос на затронутый URL, и кэшированное перенаправление было забыто.
Быстрый выигрыш - ввести это в консоль браузера, если вы можете:
fetch('example.com/affected/link', {method: 'post'}).then(() => {})
Полезно, если вы знаете уязвимый браузер (особенно во время разработки).
В качестве альтернативы , если у вас есть доступ к предыдущей странице перенаправления 301, вы можете добавить этот скрипт на страницу, и при каждом посещении кэшированный 301 будет забыт.
источник
Я отправлю ответ, который помог мне:
перейти к URL:
он должен вызвать всплывающее окно, а затем ..
cached images and files
.from beginning
источник
как ответ @thomasrutter
На самом деле это означает:
от 301 до b.com
удалить 301 a.com
добавить b.com 301 на a.com
Тогда это работает.
источник
a.com
301 -> b.com) (удалитьa.com
301) (добавитьa.com/abcdefg
301 ->a.com
) и заставить клиента просматриватьa.com/abcdefg
как-то?У меня есть простое решение, которое работает на всех основных браузерах (последняя версия), включает в себя IE, Chrome и FF
источник
В целях тестирования (чтобы избежать кэшированных перенаправлений) люди могут открыть НОВОЕ ЧАСТНОЕ ОКНО : нажмите
CTRL+SHIFT+
N
[если вы используете Mozilla, используйтеP
]источник
Протестируйте свои перенаправления в режиме инкогнито / InPrivate, чтобы при закрытии браузера он очищал этот кеш, и повторное открытие окна не содержало кеш.
источник
Как показывают другие ответы. Кеширование может быть неопределенным в браузере. Это чрезвычайно опасно. Так что не делай этого. По крайней мере, добавьте заголовки кэша. В htaccess я всегда так делаю, теперь кеширую вообще:
источник
Чтобы решить проблему с адресом localhost, я изменил номер порта, под которым работал сайт. Это работало на Chrome версии 73.0.3683.86.
источник
В последней версии Google Chrome 79 вы можете использовать chrome: // net-internals и выбрать DNS на левой панели, а затем нажать кнопку «Очистить кэш узла».
источник