Это имя файла или весь URL, используемый в качестве ключа в кеше браузера?
10008 просмотра
10 ответа
Обычно браузеры должны кэшировать ресурсы - JavaScript, CSS, изображения и т. Д. До тех пор, пока не появится новая версия, а затем убедиться, что браузер выбирает и кэширует новую версию.
Одним из решений является встраивание номера версии в имя файла ресурса, но будет ли размещение ресурсов, которыми нужно управлять таким образом, в каталоге с номером ревизии в нем, делать то же самое? Целый URL-адрес файла используется в качестве ключа в кэше браузера или это просто имя файла и некоторые метаданные?
Если мой код меняется с выборки /r20/example.js
на /r21/example.js
, могу ли я быть уверен, что ревизия 20 из example.js
была кэширована, но теперь вместо нее ревизия 21 была выбрана и теперь она кэшируется?
Ответы (10)
35 плюса
Да, любое изменение в любой части URL (за исключением изменений протоколов HTTP и HTTPS) интерпретируется браузером (и любыми промежуточными прокси-серверами) как другой ресурс и, таким образом, приводит к отдельной сущности в кэше браузера.
Обновить:
Заявление в этой статье ThinkVitamin о том, что браузеры Opera и Safari / Webkit не кэшируют URL-адреса с? Query = strings, является ложным .
Добавление параметра номера версии к URL-адресу является вполне приемлемым способом очистки кеша.
Что может сбить с толку автора статьи ThinkVitamin, так это то, что нажатие клавиши Enter в строке адреса / адреса в Safari и Opera приводит к различному поведению URL-адресов со строкой запроса в них.
Однако ( и это важная часть! ) Opera и Safari ведут себя так же, как IE и Firefox, когда дело доходит до кэширования встроенных / связанных изображений, таблиц стилей и сценариев на веб-страницах - независимо от того, есть ли у них "?" символы в их URL. (Это можно проверить с помощью простого теста на обычном сервере Apache.)
(Я бы прокомментировал принятый в настоящее время ответ, если бы у меня была репутация, чтобы это сделать. :-)
Автор: Már Örlygsson Размещён: 17.09.2008 05:022 плюса
Я на 99,9999% уверен, что весь URL-адрес используется для кэширования ресурсов в браузере, поэтому схема URL-адреса должна работать нормально.
Автор: delux247 Размещён: 17.09.2008 02:462 плюса
Кеш-ключ браузера является комбинацией метода запроса и URI ресурса. URI состоит из схемы, полномочий, пути, запроса и фрагмента.
Соответствующая выдержка из спецификации HTTP 1.1 :
Основной ключ кеша состоит из метода запроса и целевого URI. Тем не менее, поскольку широко используемые сегодня кэши HTTP обычно ограничиваются кэшированием ответов на GET, многие кэши просто отклоняют другие методы и используют только URI в качестве основного ключа кэша.
Соответствующая выдержка из спецификации URI :
Автор: Leonid Vasilev Размещён: 18.01.2017 09:55Общий синтаксис URI состоит из иерархической последовательности компонентов, называемой схемой, полномочиями, путем, запросом и фрагментом.
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
1 плюс
МИНИМАЛЬНОЕ, что вам нужно для идентификации объекта HTTP - это полный путь, включая любые параметры строки запроса. Некоторые браузеры могут не кэшировать объекты строкой запроса, но это не имеет ничего общего с ключом кеша.
Также важно помнить, что путь больше не является достаточным. Заголовок Vary: в ответе HTTP предупреждает браузер (или прокси-сервер и т. Д.) О ДРУГОМ, чем URL-адрес, который следует использовать для определения ключа кэша, например о файлах cookie, значениях кодировки и т. Д.
На ваш основной вопрос, да, достаточно изменить URL-адрес файла .js. К большему вопросу о том, что определяет ключ кэша, это URL плюс ограничения заголовка Vary :.
Автор: Michael Cramer Размещён: 17.09.2008 03:400 плюса
0 плюса
Конечно, он должен использовать весь путь '/r20/example.js' vs '/r21/example.js', для начала это могут быть совершенно разные изображения. То, что вы предлагаете, является жизнеспособным способом управления версиями.
Автор: Diodeus - James MacFarlane Размещён: 17.09.2008 02:470 плюса
В большинстве браузеров используется полный URL. В некоторых браузерах, если у вас есть запрос в URL, документ никогда не будет кэшироваться.
Автор: Alexandre Victoor Размещён: 17.09.2008 02:520 плюса
Весь URL. Я видел странное поведение в нескольких старых браузерах, где чувствительность к регистру вступала в игру.
Автор: user16169 Размещён: 17.09.2008 04:380 плюса
В дополнение к существующим ответам я просто хочу добавить, что это может не применяться, если вы используете ServiceWorkers или, например, offline-плагин. Тогда вы могли бы испытать различные правила кэширования в зависимости от того, как настроены ServiceWorkers.
Автор: activist Размещён: 24.10.2018 12:55-1 плюса
зависит. Предполагается, что это полный 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
Автор: scunliffe Размещён: 17.09.2008 02:46Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- url .NET - получить протокол, хост и порт
- url Это имя файла или весь URL, используемый в качестве ключа в кеше браузера?
- url URL-адрес в Erlang
- url Как я могу нормализовать URL в Python
- browser Определить часовой пояс пользователя
- browser Как отключить автозаполнение браузера в поле веб-формы / теге ввода?
- browser Отключить функцию браузера «Сохранить пароль»
- caching Может ли кеш-сервер прокси-сервера SSL GET? Если нет, достаточно ли шифрования тела ответа?
- caching Как заставить клиентов обновлять файлы JavaScript?
- caching Как мы контролируем кэширование веб-страниц во всех браузерах?
- caching Как реализовать кеш HTML для сайта PHP?
- filenames How to get file extension from string in C++
- filenames Как удалить суффикс файла и часть пути из строки пути в Bash?
- filenames Как переименовать с префиксом / суффикс?