У меня есть страница, которая загружает много изображений, css и javascript. Я добавил длинный заголовок Expires будущего и назначил Cache-Control публике на эти внешние зависимости, чтобы они были кэшированы. Но каждый раз, когда я делаю Post/Redirect/Get chrome, он пытается загрузить их снова. Такое поведение очень похоже на перезагрузку страницы. Я добавил ETags и обрабатываю заголовок If-None-Match, который помогает немного, но он по-прежнему генерирует слишком много бесполезных запросов.
Как сообщить chrome и safari для получения файлов из кеша?
chrome NOK
safari NOK
firefox OK
ie OK
Также см. Полная перезагрузка страницы Post/Redirect/Get игнорировать управление кешем на форуме поддержки google.
Разъяснение:
Я не хочу, чтобы браузер дважды запрашивал image1.png
. Он должен быть кэширован.
200 GET page1.html
200 GET image1.png (Cache-Control: public, Expires and ETag)
302 POST action.asp (form submitted from page1.html, redirects)
200 GET page2.html
304 GET image1.png (If-None-Match)
Пример:
Я создал простой пример, чтобы проиллюстрировать проблему.
Headers:
Заголовки, отправленные с изображением, следующие:
HTTP/1.1 200 OK
Date: Fri, 18 Jun 2010 11:30:22 GMT
Server: Apache
Cache-Control: public, max-age=86400
Expires: Sat, 19 Jun 2010 11:30:24 GMT
Etag: "123"
Content-Length: 866
Content-Type: image/png
Который должен сделать его кэшированным в течение 24 часов. Нет Vary: * или что-то в этом роде.
Update: Это поведение теперь также присутствует в Safari Mobile на iOS 4. Горит регрессия скорости загрузки страницы.
Update: В этой статье есть проблема с этой ошибкой в webkit bugzilla. Ошибка 38690 - Отправка POST, которая приводит к перенаправлению сервера, заставляет все кэшированные элементы перезагружать
Update: Проблема сохраняется в iOS 4.0.1
Update: Проблема сохраняется в iOS 4.1
Update: Проблема сохраняется в iOS 4.2
Update: Проблема сохраняется в iOS 4.2.1 и в Chrome с версии 6 до 9.
Update: В проекте Chromium есть ошибка в этом вопросе. (вы можете показать его, чтобы показать вам заботу) Проблема 68621: Сообщение/Перенаправление/Не игнорируйте инструкции кэша
Update: Проблема сохраняется в Chrome с версии 6 до 10. Теперь это ошибка 9 месяцев.
Update: Проблема исправлена с 2011-03-21 19:33:07 PST. Это отражено в поведении хрома 12 (канарейка).