使用send_data时如何设置Expires:标头

时间:2010-06-25 10:46:23

标签: ruby-on-rails http-caching

我的控制器中有一个使用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 个答案:

答案 0 :(得分:29)

我遇到了这种语法,我喜欢它: - )

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

答案 1 :(得分:10)

显然似乎无法将过期传递给send_data - 相反,您必须自己在response.headers 中设置它并正确地设置日期格式:

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

请注意,max-age标头中的Cache-Control指令会覆盖Expires标头(如果两者都存在)。有关详细信息,请参阅RFC2616 Section 14.9.3

答案 2 :(得分:3)

您问题中的代码实际上应该适用于最近的Rails:

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