Я работаю в Rails 4 на WEBrick, пытаясь получить ответ на кеш, пока он не истечет в определенное время каждый день.Похоже, что автоматически сгенерированный ETag мешает кешу истечения, поэтому я искал этот ответ.Здесь я не нашел ничего полезного, но я решил свою проблему, поэтому я поделюсь.
tl; dr Установить заголовок Last-Modified
Но установить что?В моей ситуации я пытался оптимизировать веб-сервис, который возвращал результаты процесса, который выполняется в одно и то же время каждый день.Заголовки моего ответа в итоге выглядели так:
response.headers['Cache-Control'] = "max-age=86400"
response.headers['Expires'] = getCacheTime
response.headers['Last-Modified'] = getLastModified
Сначала вы хотите явно написать заголовок Cache-Control
, чтобы перезаписать, какой бы ни была установка по умолчанию.Я установил мой на 24 часа, чтобы он совпал с максимумом моего заголовка истечения.Я установил срок действия заголовка с помощью функции, которая выглядит примерно так:
def getCacheTime
now = Time.now.utc
cacheTime = Time.utc(now.year, now.month, now.day, 22, 00, 00)
if now > cacheTime
cacheTime = cacheTime + (60 * 60 * 24)
end
cacheTime.httpdate
end
Функция getLastModified возвращает ровно на 24 часа меньше, чем функция getCacheTime .Похоже, что установка этого параметра подавит ETag (еще один заголовок кэширования валидации) по крайней мере в моей текущей среде разработки.