Заголовок If-None-Match отменяет Cache-Control: max-age?

У меня есть веб-приложение, которое обслуживает изображение:

Я четко устанавливаю Cache-Control заголовок, и веб-сервер устанавливает Etag,

Проблема в том, что ресурсы If-None-Match каждый раз эффективно игнорируя Cache-Control заголовок. (Фреймворк возвращает 304 соответственно, но существует и туда и обратно).

Я читал, что Etag заголовок может отменять Cache-Control и все еще идти, чтобы проверить соответствие, даже если ресурс является локальным и действительным. Это не имеет смысла для меня.

Кто-нибудь знает, что происходит? Что мне здесь не хватает?

PD: веб-сервер является Play! приложение

2 ответа

Решение

Наконец то понял. Некоторые браузеры (наверняка, Google Chrome и Firefox) игнорируют локальный кеш при перезагрузке страницы с помощью CMD+R или F5.

В моем случае, независимо от того, как высоко я установил максимальный возраст, перезагрузка страницы всегда будет вызывать If-None-Match проверьте и получите 304 обратно. Навигация по сайту с помощью ссылок не вызовет такого поведения, и кэши будут работать очень хорошо.

Примечание. Я этого не заметил, поскольку в одностраничном веб-приложении (например, в моем) нет "навигации по ссылкам", так как большинство из них загружаются в начале.

Вы можете быть поражены прокси.

max-age Директива предназначена для браузеров, а s-maxage Директива предназначена для прокси.

Похоже, вам не хватает директивы s-maxage в заголовке Cache-Control.

Вы также можете добавить public директива(хотя в соответствии со спецификацией это должно быть по умолчанию, это не помешает установить его явно)

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

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

У меня есть все 3 директивы, установленные в службе, которая обслуживает образы (которая также использует ETag и Last-Modified) для CDN, и я не заметил ненормального поведения в моих тестах.

Другие вопросы по тегам