Имеет ли смысл иметь max-age и s-maxage в HTTP-заголовке Cache-Control?
Учитывая, что max-age применяется ко всем кэшам, а s-maxage применяется только к общим кэшам (кэш прокси и шлюза)....
Имеет ли смысл использовать обе директивы на неистребимой и общедоступной странице?
Псевдокод контроллера:
w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");
return w;
Ответы
Ответ 1
Из Определения полей заголовка HTTP:
14.9.3 Модификации основного механизма истечения срока действия
...
S-MaxAge
Если ответ содержит директиву s-maxage, то для общего кэша (но не для частного кеша) максимальный возраст, указанный в этой директиве переопределяет, максимальный возраст, указанный либо максимальным -age или заголовок Expires.
...
Примечание. переопределяет. Таким образом, было бы разумно, если вы намерены указать другой максимальный возраст для общих кэшей по сравнению с max-age
, который будет использоваться конечными пользователями.
В вашем конкретном примере они одинаковы, поэтому указание s-maxage
просто не нужно.
Ответ 2
Ключевым моментом, который следует отметить в определении, является общий кэш
Из Определения полей заголовка HTTP
14.9.3 Модификации основного механизма истечения срока действия
...
S-MaxAge
Если ответ содержит директиву s-maxage, то для общего кэша (но не для частного кэша) максимальный возраст, указанный в этой директиве переопределяет максимальный возраст, указанный либо директивой max-age, либо заголовком Expires.
...
Это означает, что обратные прокси-серверы, такие как лак, облачный, облачный флэш, могут иметь возраст кэша, отличный от кеша браузера.
Я лично предпочел бы значение s-maxage
выше maxage
В HTTP 1.1 после того, как ответ кэширован, вы не можете связаться с браузером, чтобы сделать недействительным кеш, но вы можете сообщить его CDN.