Мы хотим кэшировать бюст при производственных развертываниях, но не тратить кучу времени на поиски системы для этого. Я подумал о том, чтобы применить параметр к концу файлов css и js с текущим номером версии:
<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/>
Два вопроса: эффективно ли это сломает кеш? Будет ли параметр заставлять браузер никогда не кэшировать ответ с этого URL-адреса, поскольку параметр указывает, что это динамический контент?
источник
<link rel="stylesheet" href="style.css?v=1487935578" />
Да. Даже Stack Overflow использует этот метод, хотя я помню, что у них (с их миллионами посетителей в день и миллиардами различных версий и конфигураций клиентов и прокси) были некоторые странные случаи, когда даже этого было недостаточно, чтобы сломать кеш. Но общее предположение состоит в том, что это сработает и является подходящим методом для нарушения кэширования на клиентах.
Нет. Параметр не изменяет политику кэширования; заголовки кеширования, отправленные сервером, по-прежнему применяются, и если он не отправляет их, значения по умолчанию для браузера.
источник
/static/v22/file.css
как вы могли бы сделать несколько файлов с одним переименованием папки, например/static/v23/file.css
и/static/v23/mystuff.js
Безопаснее указывать номер версии в фактическом имени файла. Это позволяет одновременно существовать нескольким версиям, поэтому вы можете развернуть новую версию, и если какие-либо кешированные HTML-страницы все еще существуют, запрашивая старую версию, они получат версию, которая работает с их HTML.
Обратите внимание, что в одном из крупнейших развертываний с поддержкой версий где-либо в Интернете, jQuery использует номера версий в фактическом имени файла и безопасно позволяет нескольким версиям сосуществовать без какой-либо специальной логики на стороне сервера (каждая версия - это просто отдельный файл).
Это блокирует кеш один раз, когда вы развертываете новые страницы и новые связанные файлы (что вам и нужно), и с этого момента эти версии могут быть эффективно кэшированы (что вам тоже нужно).
источник
Как уже говорили другие, перебор кеша с помощью параметра запроса обычно считается плохой идеей (tm), и это было уже давно. Лучше отражать версию в названии файла. Html5 Boilerplate , среди прочего, не рекомендует использовать строку запроса.
Тем не менее, все рекомендации, которые я видел и цитирующие источник, похоже, основаны на своей мудрости из статьи Стива Содерса 2008 года. Его выводы основаны на поведении доверенных лиц в то время, и они могут быть актуальны или не актуальны в наши дни. Тем не менее, в отсутствие более свежей информации изменение имени файла является безопасным вариантом.
источник
Он будет очищать кеш один раз, после того как клиент загрузит ресурс, каждый второй ответ будет обслуживаться из кеша клиента, если:
источник
В общем, это должно быть хорошо, но это может не работать, если есть промежуточный кеш (прокси), который настроен на игнорирование параметров запроса.
Например, если вы обслуживаете статический контент через Akamai CDN, его можно настроить на игнорирование параметров запроса, чтобы предотвратить перебор кеша с помощью этого метода.
источник
Это очень сильно зависит от того, насколько надежным должно быть ваше кеширование. Например, прокси-сервер squid (и, возможно, другие) по умолчанию не кэширует URL-адреса, обслуживаемые строкой запроса - по крайней мере, так было, когда была написана эта статья. Если вы не возражаете против определенных вариантов использования, вызывающих ненужные пропуски кеша, продолжайте работу с параметрами запроса. Но очень легко настроить схему очистки кеша на основе имени файла, которая позволяет избежать этой проблемы.
источник
Найдено сравнение 2 методов (строки запроса против имени файла) здесь :
Версия как строка запроса имеет две проблемы.
источник
Другой подобный подход - использовать htaccess mod_rewrite для игнорирования части пути при обслуживании файлов. Ваша индексная страница, которая никогда не кэшируется, ссылается на последний путь к файлам.
С точки зрения разработки это так же просто, как использование params для номера версии, но столь же надежно, как и подход к имени файла.
Используйте игнорируемую часть пути для номера версии, и сервер просто игнорирует ее и обслуживает некэшированный файл.
1.2.3/css/styles.css
обслуживает тот же файл, чтоcss/styles.css
и первый каталог, который удаляется и игнорируется файлом htaccessВключение версионных файлов
Обратите внимание, что этот подход означает, что вам нужно отключить кеширование вашей индексной страницы - Использование тегов <meta> для отключения кеширования во всех браузерах?
файл .htaccess
Вы можете использовать тот же подход на любой серверной платформе, которая позволяет переписывать URL
(условие перезаписи адаптировано из mod_rewrite - перезаписать каталог в строку запроса, кроме / #! / )
... и если вам нужна очистка кеша для вашей страницы индекса / точки входа на сайт, вы всегда можете использовать JavaSript для ее обновления.
источник
источник
источник
Надеюсь, это поможет вам ввести внешний JS файл.
Источник - код Cachebuster на JavaScript
источник