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


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

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

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

Есть идеи? Htaccess? PHP API, к которому обращаются старые и новые page.html?

Спасибо!

Author: Kyle, 2012-01-20

3 answers

Что ж, если страница уже кэширована браузером, трудно сказать ей, чтобы она не использовала свою кэшированную версию, потому что она, вероятно, не потрудится проверить еще раз, прежде чем определит, что ее кэшированная версия устарела. Вам просто нужно будет отправить письмо по электронной почте всем своим пользователям, сообщив им, чтобы они нажали 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 о Возможности кэширования ответов:

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

 29
Author: rdlowrey, 2012-01-20 06:28:52

Возможно, 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.
?>

Page.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>
 4
Author: , 2013-02-22 04:08:42

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

 0
Author: DeepBlue, 2015-05-02 21:54:16