В RFC2616 вот что пишут:
To mark a response as "never expires," an origin server sends an
Expires date approximately one year from the time the response is
sent. HTTP/1.1 servers SHOULD NOT send Expires dates more than one
year in the future.
Во-первых, это всего лишь "SHOULD NOT". Редакция HTTP протокола славна
некоторыми пассажами, rationale которых нигде не приводится.
Во-вторых, использование "Expires: 31 Dec 2037" исключительно на совести
веб-разработчика. Я вполне уверен, что в этой роли никаких мук
испытывать не стану, равно как и страхов, поскольку не виже решительно
никаких проблем. Собственно говоря, "Expires" - устаревший заголовок,
рудимент для совместимости с HTTP 1.0 (хотя таковых запросов, увы, около
20%). Концепция "max-age" куда как прозрачнее и логичнее.
Для "expires max" я решил выставлять "Cache-Control: max-age=<10 лет>",
а не max-age=<2^31>, потому что не факт, что бразуеры работают с time_t,
больше 32 бит. Тогда прибавив 2^31 к текущему времени они получат время
не в далёком будущем, а в далёком прошлом.
Игорь Сысоев
http://sysoev.ru