1

В частности, какие части URL используются для сравнения. Предположим, что я обслуживаю таблицу стилей CSS в https://www.example.com/a/b/test.css с соответствующими заголовками HTTP для cache-control, max-age и т. Д. Когда пользователь переходит к каждому из следующих URL-адресов позже, какой из них будет обслуживать кешированный файл?Как браузеры сравнивают URL-адреса для кэширования?

https://www.example.com/a/b/test.css 
https://www.example.com/a/b/test.css?abc=123 
https://www.example.com/a/b/test.css#abc=124 

В принципе, о чем я спрашиваю, является ли или нет «поиск» и «хэш» часть строки URL сравниваются, когда браузер решает, следует ли использовать кэшированный ресурс. Кроме того, совместима ли эта логика сравнения между браузерами или какая-то часть какого-то стандарта?

ответ

2

RFC 7234 states:

Ключ первичного кэша состоит из метода запроса и целевого URI.

Более существенно, RFC 7230 explains that:

Целевой URI исключает компонент фрагмента ссылки-, если таковые имеются, , поскольку идентификаторы фрагментов зарезервированы для клиентской стороны обработки

Ввод тех, два вместе, первые два ресурса: не эквивалент (так как запрос является частью URI). Последнее относится к тому же ресурсу, что и первый. Это стандартное поведение.

Однако, обратите внимание, что предыдущая версия спецификации stated:

Примечание: Раздел 13.9 [RFC2616] запрещенные кэша из расчета эвристического свежесть URIs с компонентами запроса (то есть те, содержащих «? «). На практике это не было широко реализовано .

, который предполагает, что некоторые реализации не будут кэшировать второй пример, если конкретно не указано, что оно может быть кэшируемым.

+0

Спасибо за фантастический ответ! Знаете ли вы, какие конкретные реализации игнорируют запросы? В частности, среди современных браузеров/веб-просмотров. – AlexZ

+0

[Этот ответ] (https://stackoverflow.com/a/5526887/733345) предлагает «много старых браузеров (включая IE6)». – Joe

Смежные вопросы