Как установить заголовок 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`