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

Ruby 如何在Heroku上托管的Sinatra应用程序中设置HTTP响应(缓存)头,ruby,caching,http-headers,heroku,sinatra,Ruby,Caching,Http Headers,Heroku,Sinatra,我有一个相当简单的应用程序(只有一个index.html文件和一个css文件——它实际上只是一个静态页面)托管在Heroku上 我用Sinatra在Heroku上主持。“应用程序”本身相当简单: require 'rubygems' require 'sinatra' get "/" do File.read(File.join('public', 'index.html')) end 问题是,如何为静态资产设置HTTP响应头?特别是,我想设置Expires头以进行缓存 编辑:我希望

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

我用Sinatra在Heroku上主持。“应用程序”本身相当简单:

require 'rubygems'
require 'sinatra'

get "/" do
    File.read(File.join('public', 'index.html'))
end
问题是,如何为静态资产设置HTTP响应头?特别是,我想设置
Expires
头以进行缓存


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

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

cache_control :public, max_age: 60
缓存一分钟<代码>缓存控制是一个简单的操作

否则,我建议您看看Sinatra是如何设置的,这样您就不用处理静态文件了

希望这有帮助


编辑:我刚才看到您明确要求使用
Expires
标题。我不确定,但这应该与
缓存控制
的方式完全相同。很抱歉造成混淆

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

加入:

set :static, true
…您可以将
index.html
stylesheet.css
添加到
public/
文件夹中。然后当您访问
http://localhost:9292/stylesheet.css
将为您提供静态文件

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

set :public, "your_folder_name"
如果我们想不那么明确,我们可以创建
public/
文件夹,因为Sinatra将为我们启用
:static
:)


来源:

那么你会怎么做?假设我仍然希望它托管在Heroku上。请注意,Heroku在他们的文档中建议
缓存控制
(请参阅),而Headhunter则托管在那里。我会使用
响应['Expires']=
。请注意,
Expires
被指定为绝对时间,与请求无关()Sinatra实际上有一个专门用于此的助手:
cache\u control:public,:max\u age=>60
@bjeanes谢谢,我已经更新了答案。这至少从1.0开始就存在了:)