2015-01-16 2 views
2

У меня проблема с кешированием. Chrome не всегда загружает более новые версии активов сайта, чаще всего файлы Javascript, загруженные Require.js. Прямо сейчас у меня эта проблема более 24 часов с конкретным файлом.Почему хром не запрашивает более позднюю версию кэшированного файла?

Если я загружаю страницу с открытой вкладкой devtools (сетевая вкладка), файлы-нарушители обычно показывают ответ HTTP 200, но в столбце «Размер» отображается «(из кеша)». В деталях заголовков отображается «Предварительные заголовки показаны». Wireshark показывает, что файл на самом деле не запрашивается с сервера.

Хром показывает дату последней модификации файла как сб, 06 дек. 2014 01:27:55 GMT, но мой необработанный запрос на сервер явно указывает, что файл изменился совсем недавно.

Если я необработанного запрос себя я не вижу ничего в заголовках, возвращенных сервером, который должен вызвать эту проблему:

GET /js/path/to/file.js HTTP/1.1 
Host: static.mydomain.com 
User-Agent: Matt 

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Vary: Accept-Encoding 
Content-Type: application/javascript 
Accept-Ranges: bytes 
ETag: "4203477418" 
Last-Modified: Fri, 16 Jan 2015 18:28:30 GMT 
Content-Length: 5704 
Date: Fri, 16 Jan 2015 21:05:06 GMT 
Server: lighttpd/1.4.33 

.... data here ... 

Вопрос был сообщенный хромированными пользователей на нескольких операционных систем с различными версии хром, но я обычно не получаю сообщения о проблемах кеширования в других браузерах. (Прямо сейчас я нахожусь на "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/39.0.2171.71 Safari/537,36")

Edit: Проблема, кажется, самое обидное с файлами, загруженными Require.js, хотя я столкнулся с ним с javascript, который напрямую ссылается на эту страницу.

Что мне здесь не хватает? Почему хром не проверяет новую версию файла?

ответ

2

Как выясняется, браузеры плохо документировали поведение кэширования, когда заголовок Cache-Control не указан в ответе сервера (ну, по крайней мере, когда не указано поведение кэширования). В общем, кажется, что в этом случае браузер определяет, как долго кэшировать элемент на основе последней измененной даты файла (если объявлено в ответе), текущей даты и ????

См: https://webmasters.stackexchange.com/questions/53942/why-is-this-response-being-cached

К сожалению, официальная страница Google на кэширование HTTP не упоминает, что происходит, если заголовок не установлен: https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching

Edit: я наткнулся на какой-то более конкретной информации о эвристики используется , здесь: What heuristics do browsers use to cache resources not explicitly set to be cachable?

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