我的控制器中有一个使用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
哈希中明确地设置它,但肯定必须有一个包装器(或其他东西)?
答案 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`