缓存控制标题和Heroku动态图像

时间:2011-08-14 19:01:36

标签: ruby-on-rails caching http-headers heroku cache-control

我正在尝试了解Heroku上的HTTP缓存。阅读their article之后,我很好奇Cache-Control HTTP标头是如何工作的。

在文章的sample application mentioned中,标题是在控制器操作中设置的:

def image
    @qrimage = QRImage.find_by_md5(params[:md5])
    if @qrimage
      headers['Cache-Control'] = 'public; max-age=2592000' # cache image for a month
      send_data @qrimage.data, :filename => @qrimage.filename, :disposition => 'inline', :type => "image/png"
    else
      render :nothing => true, :status => 404
    end
end

@qrimage.data的代码如下:

  def data
    qrcode = RQRCode::QRCode.new(self.message, :size => self.version, :level => self.ecc.to_sym)
    qrcode.to_s
  end

所以对我来说,看起来每次都在服务器上生成图像。然后由浏览器缓存一个月。所以这里唯一的节省是同一个访问者试图查看相同的图像。

如果不同的访问者尝试查看同一图像,它仍会生成并发送。如果你问我,那并不是那么有用。

我的理解是否正确,或者是否会为每个网站访问者重新生成相同的图片?

1 个答案:

答案 0 :(得分:3)

  

Aspen和Bamboo堆栈上的Heroku应用程序面向Varnish,一个   HTTP加速器。 Varnish将缓存您的应用程序的输出   根据标准HTTP头提供的提示来描述一个   页面的可缓存性。这些标题与浏览器使用的标题相同,   所以正确设置这些标题可以让你的应用程序倍增   在Heroku上的速度:在Varnish层,再次在用户的   浏览器。

如果您不知道,Varnish本质上是一个非常快速的缓存,位于您的应用程序和互联网之间。当标题表示缓存是安全的时,Varnish会这样做,并使用缓存的对象响应其他请求,而不会访问您的应用程序。