Понимание стратегий кэширования динамически генерируемой страницы поиска

Изучая стратегии кэширования, принятые различными веб-сайтами поисковых систем и самим Stackoverflow, я не могу не заметить тонкие различия в заголовках ответов:

Поиск Google

Cache-Control: private, max-age=0
Expires: -1

Поиск Yahoo

Cache-Control: private
Connection: Keep-Alive
Keep-Alive: timeout=60, max=100

Поиск в Stackoverflow

Cache-Control: private

За принятыми настройками должно быть какое-то логическое объяснение. Может ли кто-нибудь объяснить различия, чтобы каждый из нас мог учиться и получать пользу?


person Question Overflow    schedule 02.05.2012    source источник


Ответы (1)


Из определения полей заголовка RFC2616 HTTP/1.1, 14.9.1 Что можно кэшировать :

private
   Indicates that all or part of the response message is intended for a single
   user and MUST NOT be cached by a shared cache. This allows an origin server
   to state that the specified parts of the response are intended for only one
   user and are not a valid response for requests by other users. A private
   (non-shared) cache MAY cache the response.

max-age=0 означает, что он может кэшироваться до 0 секунд. Нулевое значение будет означать, что кэширование выполнять не следует.

Expires=-1 следует игнорировать, когда присутствует max-age, а -1 является недопустимой датой и должно анализироваться как значение в прошлом (то есть срок действия уже истек).

Из Определения полей заголовка RFC2616 HTTP/1.1, 14.21 Expires :

Note: if a response includes a Cache-Control field with the max-age directive
      (see section 14.9.3), that directive overrides the Expires field

HTTP/1.1 clients and caches MUST treat other invalid date formats, especially
including the value "0", as in the past (i.e., "already expired").

Connection: Keep-Alive и Keep-Alive: timeout=60, max=100 настраивают параметры для постоянных подключений. Все соединения, использующие HTTP/1.1, являются постоянными, если не указано иное, но эти заголовки изменяют фактические значения тайм-аута вместо использования браузеров по умолчанию (которые сильно различаются).

person sisve    schedule 02.05.2012
comment
Хороший ответ. Чтобы сделать его полным, можете ли вы объяснить, почему max-age=0 установлен для Google, в то время как Yahoo и Stackoverflow не устанавливают его? И как ведет себя кеш, если не выставить max-age? - person Question Overflow; 02.05.2012
comment
Yahoo (se.search.yahoo.com) отправляет мне private, max-age=0, no-cache. Я не знаю, почему StackOverflow не указывает максимальный возраст, в настоящее время он позволяет браузеру кэшировать страницу результатов. Спроси в Мете! - person sisve; 02.05.2012