Есть ли способ заставить кеш клиента перезагрузить HTML-файл, если вы не можете изменить URI, ссылающийся на этот файл (например, не можете добавить параметр timestamp)?
Вот моя ситуация:
example.com/page.html
который вызывает script.js
example.com/page.html
не может быть изменен (без обновлений плагина) page.html
было изменено. Мне нужно очистить старый page.html
от кеша пользователей, чтобы новый page.html
мог загружаться. Есть идеи? Htaccess? API PHP, на который page.html
старый & новый page.html
?
Благодаря!
Ну, если страница уже кэширована браузером, сложно сказать, что она не использует свою кешированную версию, потому что она, вероятно, не позаботится снова проверить, прежде чем она определит, что ее кешированная версия устарела. Вам просто нужно отправить письмо с уличной почтой всем вашим пользователям, сообщившим им нажать 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 по кэшированию ответов :
Если не существует ни проверки валидатора кеша, ни явного времени истечения, связанного с ответом, мы не ожидаем, что он будет кэшироваться, но некоторые кеши МОГУТ нарушать это ожидание (например, когда доступ к сети отсутствует или нет).
Возможно, 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>
Вы можете изменить имя файла, например page_v2.html, что сделает загрузчик загружает страницу как новую страницу.