【问题标题】:How to set HTTP response (cache) headers in a Sinatra app hosted on Heroku如何在 Heroku 上托管的 Sinatra 应用程序中设置 HTTP 响应(缓存)标头
【发布时间】:2011-06-16 08:52:29
【问题描述】:

我有一个相当简单的应用程序(只有一个 index.html 文件和一个 css 文件 - 它实际上只是一个静态页面)托管在 Heroku 上。

我使用 Sinatra 在 Heroku 上托管它。 “应用程序”本身相当简单:

require 'rubygems'
require 'sinatra'

get "/" do
    File.read(File.join('public', 'index.html'))
end

问题是,如何为静态资产设置 HTTP 响应标头?特别是,我想设置 Expires 标头用于缓存目的。

编辑:我希望将上述标题添加到静态资产(即位于/public 下的标题,如背景图像、图标等)

【问题讨论】:

    标签: ruby caching http-headers heroku sinatra


    【解决方案1】:

    除了我不会通过 Sinatra 堆栈来提供静态文件之外,您还可以调用

    cache_control :public, max_age: 60
    

    缓存一分钟。 cache_controlhelper that comes with Sinatra

    否则,我建议您查看http://www.sinatrarb.com/configuration.html 以了解 Sinatra 的设置方式,因此您无需处理提供静态文件的工作。

    希望这会有所帮助。

    编辑:我刚刚看到您明确要求 Expires 标头。我不确定,但这应该与Cache-Control 完全相同。很抱歉造成混乱

    【讨论】:

    • 那你会怎么做呢?假设我仍然希望它托管在 Heroku 上。
    • 请注意,Heroku 在他们的文档中建议使用Cache-Control(请参阅docs.heroku.com/http-caching),并且 Headhunter 托管在那里。我会使用response['Expires'] = 。请注意,Expires 被指定为绝对时间,而不是相对于请求 (w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21)
    • Sinatra 实际上有一个专门为此而设计的助手:cache_control :public, :max_age => 60
    • @bjeanes 谢谢,我已经更新了答案。这至少从 1.0 开始就存在了 :)
    【解决方案2】:

    作为@awendt 答案的扩展,Sinatra 实际上可以处理静态文件,而无需显式定义路由并打印文件。

    通过添加:

    set :static, true
    

    ..您可以将您的 index.htmlstylesheet.css 添加到 public/ 文件夹。然后当您访问http://localhost:9292/stylesheet.css 时,您将获得静态文件。

    如果您想使用其他文件夹名称,而不是默认的public/,请尝试:

    set :public, "your_folder_name"
    

    如果我们想要不那么明确,我们可以创建 public/ 文件夹,因为知道 Sinatra 无论如何都会为我们启用 :static :)

    来源:http://www.sinatrarb.com/configuration.html#__enabledisable_static_file_routes

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2018-04-29
      • 2014-10-03
      • 1970-01-01
      相关资源
      最近更新 更多