Как установить заголовок Expires: при использовании send_data - PullRequest
12 голосов
/ 25 июня 2010

В моем контроллере есть метод, который использует 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, но, конечно, для этого должна быть оболочка (или что-то)?

Ответы [ 3 ]

29 голосов
/ 04 июля 2012

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

response.headers["Expires"] = 1.year.from_now.httpdate
10 голосов
/ 21 сентября 2010

Очевидно, что нет способа передать expires в send_data - вместо этого вы должны установить его самостоятельно в response.headers и , чтобы позаботиться о правильном форматировании даты:

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

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

3 голосов
/ 06 февраля 2014

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

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