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

Мы сталкиваемся с проблемой, когда наши клиенты обслуживаются устаревшими файлами js, css после развертывания кода. Мы используем IIS в качестве нашего веб-сервера, и наш код находится в ASP.Net 4.5. Я провел небольшое исследование и выяснил, что ETag в сочетании с Cache-control должен работать. Как я понимаю, ETag автоматически генерируется веб-сервером на основе метки даты и времени файла, поэтому я выполнил следующие шаги, чтобы понять, почему система не отправляет последнюю версию файлов js и css.

  1. Перейдя на мой сайт к веб-странице, давайте вызовем demo.aspx. (Теперь предположим, что demo.aspx содержит ссылку на a.js, b.js и c.css).
  2. Убедитесь, что браузер запросил файлы a.js, b.js и c.css, и веб-сервер доставил эти файлы после того, как я жестко перешел на страницу (Ctrl + F5) на моем веб-сайте.
  3. Кликнул на другой веб-странице
  4. Пошел к веб-хранилищу и обновил вручную файлы (a.js, b.js и c.css, чтобы обновить отметку даты и времени этих файлов)
  5. Перейдите на demo.aspx снова.
  6. На этот раз я вижу только запрос к demo.aspx, но не к любому из файла ресурсов (a.js, b.js и c.css).

Я не понимаю, почему файлы.js не запрашиваются при доступе к моей странице demo.aspx.

Также есть ли простой способ заставить клиентские браузеры загружать последнюю версию файлов.js и.css каждый раз, когда я развертываю код. Основываясь на своих исследованиях, я обнаружил, что один из способов - переименовать файл.js и.css. Обратите внимание, что это решение не будет работать для нас.

Мы используем панель обновления в наших проектах. Не уверен, что это как-то связано с тем, что браузер не запрашивает js-файлы во второй раз

1 ответ

Широко используемый трюк - добавить параметр строки запроса, который увеличивается с каждой новой версией css или же js файл.

подобно myScript.js?version=12, Когда число меняется, браузер видит его как новый файл, и он загружается, а не извлекается из кэша.

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

Другие вопросы по тегам