Как установить заголовок Expires: при использовании send_data

У меня есть метод в моем контроллере, который использует send_data следующим образом:

def show
  expires_in 10.hours, :public => true
  send_data my_image_generator, :filename => "image.gif", :type => "image/gif"
end

Использование expires_in приводит к отправке заголовков следующим образом:

HTTP/1.1 200 OK
Connection: close
Date: Fri, 25 Jun 2010 10:41:22 GMT
ETag: "885d75258e9306c46a5dbfe3de44e581"
Content-Transfer-Encoding: binary
X-Runtime: 143
Content-Type: image/gif
Content-Disposition: inline; filename="image.gif"
Content-Length: 1277
Cache-Control: max-age=36000, public

Я хотел бы добавить заголовок, например Expires: (some exact date), чтобы агент пользователя не возвращался. Но я не вижу, как заставить send_data установить этот заголовок?

Я предполагаю, что я мог бы явно установить его в хеше response.headers, но, наверняка, для этого (или что-то) должна быть оболочка?

Ответ 1

По-видимому, похоже, что путь для отправки не истекает, поэтому вместо этого вы должны установить его в response.headers и позаботиться о форматировании даты соответствующим образом:

response.headers["Expires"] = CGI.rfc1123_date(Time.now + period)

Обратите внимание, что директива max-age в заголовке Cache-Control переопределяет заголовок Expires, если они присутствуют. Подробнее см. RFC2616 Раздел 14.9.3.

Ответ 2

Я столкнулся с этим синтаксисом, и мне это нравится: -)

response.headers["Expires"] = 1.year.from_now.httpdate

Ответ 3

Код в вашем вопросе должен действительно работать с недавними Rails:

`expires_in 10.hours, :public => true`