Принудительное обновление кэша после развертывания

есть ли способ заставить кэш клиента перезагрузить HTML-файл, если вы не можете изменить URI, ссылающийся на этот файл (например, не можете добавить метку времени)?

вот моя ситуация:

  • плагин развернут на 1000 пользователей
  • этот плагин загружает example.com/page.html, который призывает script.js
  • URI ресурса example.com/page.html не может быть изменен (W обновления/o плагин)
  • page.html была изменена. Мне нужно очистить старый page.html из кэша пользователей так новый page.html загрузить.

какие идеи? Реврайт? PHP API, который старый и новый page.html призываем?

спасибо!

3 ответов


Ну, если страница уже кэшируется браузером, трудно сказать, чтобы она не использовала свою кэшированную версию, потому что она, вероятно, не потрудится проверить еще раз, прежде чем она определит, что ее кэшированная версия устаревшая. Вам просто нужно отправить письмо snail-mail всем своим пользователям, сообщив им, чтобы нажать ctrl+f5:)

есть шанс, что браузер может по крайней мере попробовать запрос HEAD, чтобы проверить измененную метку времени, прежде чем он обслуживает свою кэшированную версию. В этом случае следование поможет вам.

браузеры согласовывают свое содержимое с вашего веб-сервера, используя стандартные заголовки HTTP. Если вы хотите, чтобы браузер не кэшировал файл, вы должны отправить соответствующие заголовки HTTP. Если вы хотите сделать это в PHP вы можете использовать header функция для отправки соответствующих заголовков HTTP в браузер:

header('Cache-Control: no-cache');
header('Pragma: no-cache');

Если это должно быть сделано через HTML вы можете сделать следующее в ваш заголовок страницы:

<meta http-equiv="Expires" content="Tue, 01 Jan 1995 12:12:12 GMT">
<meta http-equiv="Pragma" content="no-cache">

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


обновление

из спецификации HTTP/1.1 на Ответ Cacheability:

Если нет ни валидатора кэша, ни явного времени истечения срока действия общаться ответ, мы не ожидаем, что он будет кэшироваться, но некоторые кэши могут нарушить это ожидание (например, когда мало или нет сетевого подключения).


возможно, PHP можно использовать для добавления метки времени в вызов javascript. Затем вы можете запустить это в течение всего времени...........Например:

check_if_cache_should_be_disabled.в PHP

<?php
$deployment_flag = true; // Uncomment this if you want to disable normal cache.
//$deployment_flag = false // Uncomment this if you want to enable normal cache.
?>

страница.в PHP

<script src="/js/script.js<?php 
require('check_if_cache_should_be_disabled.php');
//  File Get Contents can be used for a remote server
//file_get_contents('http://yourserver.com/check_if_cache_should_be_disabled.php');
if ($deployment_flag == true) {
print ( '?ts='.date() );
}
?>"></script>

вы можете изменить имя файла, например page_v2.html, который заставит borwser загрузить страницу как новую страницу.