Как обеспечить обновление кэша браузера клиента после развертывания новых файлов CSS или JavaScript?
Я использую Microsoft ASP.NET Web Optimization Framework
Как вы, возможно, знаете, он может объединить все JS/CSS в один файл. Вы можете определить имя выходного файла в config и гарантировать, что пользовательский браузер будет получать обновления JS/CSS, он добавляет такой параметр, как v=yUVjELgc9foFnhZgsvMfx2DhVRLKWK-w69IoCVhJ_aM1
Ссылка выглядит так:
src="/scripts/js/jquery?v=yUVjELgc9foFnhZgsvMfx2DhVRLKWK-w69IoCVhJ_aM1"
Я слышал, что не все браузеры поддерживают этот параметр и не обновляют кеш.
Могу ли я быть уверен, что все браузеры будут обновлять кеш, используя этот подход, или мне придется вручную генерировать новое имя файла? Есть ли таблица, где я вижу браузеры, которые не поддерживают это?
Спасибо
2 ответа
Я слышал, что не все браузеры поддерживают этот параметр и не обновляют кеш.
Браузерам не нужно "поддерживать" это.
Его цель - изменить URL-адрес сценария.
Поскольку URL-адрес отличается, ресурс по этому URL-адресу не будет кэширован.
Чтобы техника не работала, браузер должен был иметь серьезную ошибку (в которой были специальные строки запроса для обработки кэша). Это сломало бы огромное количество Интернета, так как (например) поиск в Google "котят", а затем поиск "щенков" показывал бы результаты кэширования котят для поиска щенков.
Это будет работать во всех браузерах, потому что когда вы отправляете совершенно другой URL, который раньше не был виден, браузер не должен использовать кэшированный ответ, так как он не может проверить, что он правильный.
13.1.1 Правильность кэша
Корректный кеш ДОЛЖЕН отвечать на запрос самым современным ответом, который хранится в кеш-памяти и который соответствует запросу.
Если вы все еще беспокоитесь и хотите придерживаться чего-то более четко определенного в стандарте, вы также можете установить Last-Modified
заголовок для этих файлов, при отправке их.
Браузеры отправляют запрос, содержащий If-Modified-Since
и когда они запрашивают более старую версию, сервер не вернет 304 Not Modified и вернет новую копию, предотвращая использование кэшированного файла.