У меня есть действие, которое я кеширую, используя
caches_action :my_action, :expires_in=>1.hours
, а также установите заголовки expires в самом действии, используя
def my_action
...
expires_in 1.hours
send_data(...,:disposition => 'inline',:type => 'image/png',:filename => params[:title]+".png")
end
Однако, когда я смотрю на заголовок ответа управления кэшем из результата, который приходит в результате попадания в memcached, я получаю это:
Cache-Control: private, max-age=0, must-revalidate
Первый раз, то есть когда в кеше ничего нет, это то, что я ожидаю, т. Е .:
Cache-Control: max-age=3600, private
Похоже, что rails + memcached не кэширует оригинальные заголовки ответа и не устанавливает соответствующие заголовки самостоятельно. В результате клиент делает запрос к серверу каждый раз, даже если результат (изображение) не изменился. Хотя действие завершается быстро, поскольку оно получает попадание в кэш, оно все равно завершает отправку всех данных снова, чего я бы хотел избежать.
Как заставить заголовки делать правильные вещи, чтобы клиент либо не делал запросов в первую очередь, либо получал ответ «не изменен»?