12

次のように 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ますが、確かにそのためのラッパー(または何か)が必要ですか?

4

3 に答える 3

29

私はこの構文に出くわし、気に入っています:-)

response.headers["Expires"] = 1.year.from_now.httpdate
于 2012-07-04T06:47:43.063 に答える
11

どうやら、send_dataにexpiresを渡す方法はないようです。代わりに、自分で設定して、日付を適切にフォーマットする必要がresponse.headers あります。

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

両方が存在する場合、ヘッダーのmax-ageディレクティブがCache-Controlヘッダーをオーバーライドすることに注意してください。Expires詳細については、 RFC2616セクション14.9.3を参照してください。

于 2010-09-20T23:54:47.020 に答える
3

あなたの質問のコードは、最近のRailsで実際に動作するはずです:

`expires_in 10.hours, :public => true`
于 2014-02-06T14:35:29.773 に答える