Подтвердить что ты не робот

Обновление силового кэша после развертывания

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

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

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

Любые идеи? Htaccess? API-интерфейс PHP, на который вызывается старый и новый page.html?

Спасибо!

4b9b3361

Ответ 1

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


UPDATE

Из спецификации HTTP/1.1 на Каширование ответов:

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

Ответ 2

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

Ответ 3

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