Это имя файла или весь URL-адрес, используемый в качестве ключа в кэшах браузера?
Как правило, браузеру требуется кэшировать ресурсы - JavaScript, CSS, изображения и т.д., пока не появится новая версия, а затем убедитесь, что браузер извлекает и кэширует новую версию.
Одно из решений заключается в том, чтобы вставить номер версии в имя файла ресурса, но будет ли таким образом управлять ресурсами таким образом в каталоге с номером ревизии в нем делать то же самое? Является ли весь URL-адрес файлом, используемым в качестве ключа в кеше браузера, или это просто имя файла и некоторые метаданные?
Если мой код меняется с выборки /r20/example.js
на /r21/example.js
, могу ли я убедиться, что ревизия 20 из example.js
была кеширована, но теперь исправлена версия 21 и теперь она кэширована?
Ответы
Ответ 1
Да, любое изменение в любой части URL-адреса (исключая изменения протоколов HTTP и HTTPS) интерпретируется как другой ресурс браузером (и любыми промежуточными прокси) и, таким образом, приводит к созданию отдельного объекта в кеше браузера.
Update:
Претензия в этой статье ThinkVitamin, что браузеры Opera и Safari/Webkit не кэшируют URL-адреса с помощью: query = string false.
Добавление параметра номера версии в URL-адрес является вполне приемлемым способом для устранения кэширования.
Что может смутить автора статьи ThinkVitamin, так это то, что нажатие Enter в строке адреса/местоположения в Safari и Opera приводит к поведению для URL-адресов с строкой запроса в них.
Однако (и это важная часть!) Opera и Safari ведут себя как IE и Firefox, когда дело доходит до кэширования встроенных/связанных изображений и таблиц стилей и скриптов на веб-страницах - независимо от того, они имеют "?" символов в их URL-адресах. (Это можно проверить с помощью простого теста на обычном сервере Apache.)
(Я бы прокомментировал принятый в настоящее время ответ, если бы у меня была репутация, чтобы сделать это.: -)
Ответ 2
Я 99.99999% уверен, что это весь url, который используется для кэширования ресурсов в браузере, поэтому ваша схема URL должна работать нормально.
Ответ 3
Кэш кеша браузера - это комбинация метода запроса и URI ресурса. URI состоит из схемы, полномочий, пути, запроса и фрагмента.
Соответствующая выдержка из Спецификация HTTP 1.1:
Основной ключ кеша состоит из метода запроса и целевого URI. Однако, поскольку кеширование HTTP в общем использовании сегодня, как правило, ограничено для кеширования ответов на GET, многие кеши просто отклоняют другие методы и использовать только URI в качестве основного ключа кеша.
Соответствующая выдержка из Спецификация URI:
Общий синтаксис URI состоит из иерархической последовательности компоненты, обозначенные как схема, полномочия, путь, запрос и фрагмент.
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
Ответ 4
Да. Другой путь с точки зрения кэшей одинаковый.
Ответ 5
Конечно, он должен использовать весь путь '/r20/example.js' vs '/r21/example.js', чтобы начать с совершенно разных изображений. То, что вы предлагаете, является жизнеспособным способом управления версиями.
Ответ 6
В большинстве браузеров используется полный URL-адрес.
В некоторых браузерах, если у вас есть запрос в URL-адресе, документ никогда не будет кэшироваться.
Ответ 7
МИНИМАЛЬНЫМ вам нужно идентифицировать объект HTTP по полному пути, включая любые параметры строки запроса. Некоторые браузеры не могут кэшировать объекты с помощью строки запроса, но это не имеет ничего общего с ключом к кешу.
Также важно помнить, что путь уже недостаточен. Заголовок Vary: HTTP-ответ предупреждает браузер (или прокси-сервер и т.д.) О чем-либо, кроме URL-адреса, который должен использоваться для определения ключа кеша, такого как файлы cookie, значения кодировки и т.д.
К вашему основному вопросу, да, достаточно изменить URL-адрес файла .js. К большему вопросу о том, что определяет ключ кеша, это URL плюс ограничения заголовка Vary:
Ответ 8
Весь URL. Я видел странное поведение в нескольких старых браузерах, где чувствительность к регистру вступила в игру.
Ответ 9
зависит. он должен быть полным URL, но некоторые браузеры (Opera, Safari 2) применяют другую стратегию кэширования для URL-адресов с разными параметрами.
Лучшее предложение - изменить имя файла.
Здесь есть очень умное решение (использует PHP, Apache)
http://verens.com/archives/2008/04/09/javascript-cache-problem-solved/
Примечания к стратегии:
"Согласно письму спецификации кэширования HTTP, пользовательские агенты никогда не должны кэшировать URL-адреса с строками запросов. В то время как Internet Explorer и Firefox игнорируют это, Opera и Safari не делают этого - чтобы все пользовательские агенты могли кэшировать ваши ресурсы, нам нужно сохранить строки запросов из их URL-адресов."
http://www.thinkvitamin.com/features/webapps/serving-javascript-fast