我正在使用最新的Sinatra,我正在Heroku上主持。有没有办法可以为我提供的静态资产设置缓存标头 /public
目录?
Sinatra提供来自的文件 /public
检查任何已定义的路由之前的目录,所以我不能只是 cache_control
路线内的方法。
该 /public
目录包含我的应用程序的CSS和JavaScript。我不希望浏览器每次都下载这些文件,因为它们不会经常更改。
我正在使用最新的Sinatra,我正在Heroku上主持。有没有办法可以为我提供的静态资产设置缓存标头 /public
目录?
Sinatra提供来自的文件 /public
检查任何已定义的路由之前的目录,所以我不能只是 cache_control
路线内的方法。
该 /public
目录包含我的应用程序的CSS和JavaScript。我不希望浏览器每次都下载这些文件,因为它们不会经常更改。
你可以使用 static_cache_control
设置 设置 Cache-Control
Sinatra提供的静态文件的标头:
set :static_cache_control, [:public, max_age: 60 * 60 * 24 * 365]
请注意,您需要使用显式数组 [...]
。
这也适用于中的所有文件 public
目录,即您不能为css和javascript文件指定不同的标头。
(如果你是 不 使用Heroku并使用Apache或Nginx来提供静态文件然后这将无法工作,在这种情况下,您需要单独配置您的网络服务器)。
我用以下方法创建了一个简单的Sinatra网站:
#!/usr/bin/env ruby
require 'sinatra'
get '/public/*' do
cache_control :public, max_age: 60 * 60 * 24 * 365
'this is public'
end
get '/' do
'hello world!'
end
当我要求'/
',我有这些标题:
x-frame-options: sameorigin
x-xss-protection: 1; mode=block
Content-Type: text/html;charset=utf-8
Content-Length: 12
Connection: keep-alive
Server: thin 1.5.0 codename Knife
200 OK
当我要求'/public/foo
',我得到了这些:
x-frame-options: sameorigin
x-xss-protection: 1; mode=block
Content-Type: text/html;charset=utf-8
Cache-Control: public, max-age=31536000
Content-Length: 14
Server: thin 1.5.0 codename Knife
200 OK
它正在使用Ruby 1.9.3p194上的当前Sinatra(1.3.3)。