Это имя файла или весь 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