Принудительное истечение срока действия кэша из файла JavaScript - PullRequest
9 голосов
/ 23 февраля 2010

У меня есть старая версия JS-файла, кэшированного в браузерах пользователей, срок действия которого установлен на 10 лет (с тех пор я научился правильно устанавливать заголовки expires на своем веб-сервере). Я обновил файл JS и хочу, чтобы мои пользователи пользовались ими.

  • Может ли мой веб-сервер заставить браузеры пользователей очищать кэш для этого одного файла, если не считать файл JS с другим именем?
  • В будущем, если заголовки expires установлены неправильно (паранойя), может ли мой JS-файл автоматически истечь сам и вызвать перезагрузку после, скажем, дня, прошедшего с момента его кэширования?

РЕДАКТИРОВАТЬ: В идеале я хочу решить эту проблему без изменения HTML-разметки на странице, где размещается скрипт.

Ответы [ 4 ]

19 голосов
/ 23 февраля 2010

Короче ... нет.

Вы можете добавить что-нибудь в конец исходного адреса тега script. Браузеры будут воспринимать это как файл, отличный от того, который они в настоящий момент кэшировали.

<script src="/js/something.js?version=2"></script>

Не уверен насчет других вариантов.

6 голосов
/ 13 марта 2013

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

Вам необходимо добавить путь к манифесту

<!DOCTYPE HTML><html manifest="demo.appcache">

В вашем файле demo.appcache вы можете просто поместить каждый файл, который вы хотите кэшировать

CACHE MANIFEST
# 2013-01-01 v1.0.0
/myjsfile.js

Если вы хотите, чтобы браузер загрузил новый файл, вы можете обновить манифест

CACHE MANIFEST
# 2013-02-01 v1.0.1
/myjsfile.js

Обязательно измените манифест кэша с датой публикации или версией (или чем-то еще) таким образом, когда браузер увидит, что манифест изменился, он загрузит все файлы в нем.

Если манифест не изменяется, браузер не будет обновлять локальный файл, даже если этот файл был изменен на сервере.

Для получения дополнительной информации, пожалуйста, взгляните на Кэш приложения HTML5

1 голос
/ 23 февраля 2010

Вы можете добавить фиктивный параметр в свои URL

<script src='oldscriptname.js?foo=bar'></script>

[e: f; б]

Основная проблема заключается в том, что если вы установили срок действия с помощью простого заголовка «Expires», то браузеры, которые кэшировали файл, даже не будут связываться с вами по этому поводу. Даже если бы у скрипта был способ ударить браузер по голове и очистить кеш, ваш старый скрипт этого не делает , поэтому у вас нет возможности передать эту функциональность клиентам.

0 голосов
/ 12 января 2017

Вы можете перезагрузить кешированный документ с помощью JavaScript:

window.location.reload(true);

Команда true указывает, что браузер должен перезагрузить страницу без кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...