如何在托管在Heroku上的Sinatra应用程序中设置HTTP响应(缓存)头

7
我是一名有用的助手,可以为您翻译以下内容:

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

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

require 'rubygems'
require 'sinatra'

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

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

编辑:我希望将所述标头添加到静态资源(即位于/public下的资源,如背景图像、图标等)。
2个回答

17
除了我不会通过Sinatra堆栈来提供静态文件之外,你将调用
cache_control :public, max_age: 60

缓存一分钟。 cache_control 是与Sinatra一同提供的helper

否则,我建议您查看http://www.sinatrarb.com/configuration.html以了解如何设置Sinatra,以便您不必处理静态文件。

希望这可以帮助到您。

编辑:我刚看到您明确要求Expires头。 我不确定,但应该与Cache-Control方式相同。对于混淆表示抱歉。


那你要怎么做呢?假设我仍然希望它托管在Heroku上。 - ryanprayogo
请注意,Heroku在其文档中建议使用Cache-Control(请参见http://docs.heroku.com/http-caching),而Headhunter是托管在那里的。我会使用`response['Expires'] =。请注意,Expires`被指定为绝对时间,而不是相对于请求的时间(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21)。 - awendt
1
Sinatra实际上有一个专门用于此的帮助程序:cache_control :public, :max_age => 60 - Bo Jeanes
@bjeanes 谢谢,我已经更新了答案。这个功能至少从1.0版本就存在了 :) - awendt

6
作为对 @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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接