Как программно аннулировать кеш браузера

Давным-давно я сделал ошибку. Я создал файл для перенаправления с корня сайта "/" на "/xxx/" для приложения и забыл добавить метаданные nocache.

index.html нравится

<html>
<head>
<meta HTTP-EQUIV="REFRESH" content="0; url=/xxx/">
</head>
</html>

Теперь у меня есть новое приложение, и я решил разместить его в корне, но получил большие проблемы. Этот файл index.html кэшируется в браузерах пользователей и всегда перенаправляет на «/xxx/».

Можно ли заставить браузер (со стороны сервера или какого-либо скрипта) перезагрузить файл. Ctrl+F5 использовать нельзя, т.к. ни одна страница не загружена. Для пользователей ручной сброс кэша нереален.


person andrey.ladniy    schedule 17.04.2014    source источник
comment
Есть определенные прагмы, которые вы можете отправить клиенту предложить для повторной загрузки файла с сервера, а не использовать то, что находится в его кеше, и большинство браузеров с радостью согласятся. Заставлять клиента сбрасывать свое состояние вопреки желанию пользователя, потому что его запрашивает странный сервер? Скорее всего, не.   -  person Two-Bit Alchemist    schedule 18.04.2014
comment
Как отправить, если нет запроса от браузера?   -  person andrey.ladniy    schedule 18.04.2014
comment
Что?? Если нет запроса от браузера, нет кеша, который можно аннулировать. Если вы хотите создать сценарий, который активно ищет браузеры и аннулирует их кеш на компьютерах пользователей, которые даже не контактируют с вами, то вы говорите о разработке червя.   -  person Two-Bit Alchemist    schedule 18.04.2014
comment
Invalidate cache - это первое, что пришло в голову (вот что я впервые сделал руками). основная задача перезагрузить страницу любым способом и в дальнейшем удалить   -  person andrey.ladniy    schedule 18.04.2014


Ответы (2)


Если у вас есть php на вашем сервере, вы можете попробовать добавить это перед вашим скриптом и надеяться, что у клиентов истечет срок их кеша:

<?php 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
?>

но это не гарантирует какого-либо соответствия, как заявил другой комментатор.

Попробуйте перенаправить с /xxx/ на /, используя перенаправление на стороне сервера:

## /xxx/index.php
<?php
http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM);
?>
person PressingOnAlways    schedule 17.04.2014
comment
Нет запросов к серверу, когда пользователь переходит в root /, поэтому нет запроса - нет ответа, пока страница находится в кеше браузера. - person andrey.ladniy; 18.04.2014
comment
@andrey.ladniy ладно, попробуй добавить редирект с /xxx/ -› / и надеюсь, что клиент попытается попасть на сервер, а не тянуть из кеша... - person PressingOnAlways; 18.04.2014
comment
+1 за отображение правильных заголовков, хотя я не могу предложить PHP. С одной стороны, это не помеченный PHP. С другой стороны, OP не упомянул какой-либо соответствующий язык на стороне сервера, поэтому это предложение так же хорошо, как и любое другое. - person Two-Bit Alchemist; 18.04.2014
comment
уже попробовал. в новом приложении на странице общей ошибки not found сделал ссылку на корень /, но после клика вернулся на /xxx/ - person andrey.ladniy; 18.04.2014
comment
@andrey.ladniy Не линк делай, а редирект сервера делай. Я добавил это в конец своего ответа. - person PressingOnAlways; 18.04.2014
comment
@Two-BitAlchemist Да, если PHP установлен, это, вероятно, проще, чем пытаться возиться с apache mod_cache и тому подобным. Если это IIS, я даю неверные инструкции. ;-) - person PressingOnAlways; 18.04.2014
comment
@PressingOnAlways хорошо, я попробую - person andrey.ladniy; 18.04.2014
comment
не помогло. Один баузер (с недействительным кешем) перенаправляет право на /, а другой на / и на /xxx/ - person andrey.ladniy; 18.04.2014
comment
как долго браузер хранит кэш. может быть проще реализовать другую логику в приложении? Создайте домашнюю страницу как /home и добавьте две переадресации сервера /-›/home и /xxx/ на /home - person andrey.ladniy; 18.04.2014
comment
@andrey.ladniy Вам, вероятно, придется это сделать. Кэш хранится до тех пор, пока он определен по умолчанию на сервере или настройками клиента по умолчанию. Если вы можете открыть консоль разработчика в своем браузере, вы можете проверить данные Network Response и найти точное время в поле истечения срока действия, т.е. истекает: пятница, 17 апреля 2015 г., 11:24:56 по Гринвичу. - person PressingOnAlways; 18.04.2014
comment
@PressingOnAlways исправлены ошибки редиректа сервера, но я не могу понять, какие и когда (/-›/home или /xxx/ -› /home я больше ничего не добавлял). Теперь я вижу /request and redirect/->/home в логах веб-сервера. - person andrey.ladniy; 18.04.2014

Добавьте перенаправление с «/xxx/» на «/?new».

person Zvonimir Burić    schedule 27.10.2017