如何在 Heroku 上托管的 Ruby/Sinatra 应用程序中设置 HTTP 标头?

Posted

技术标签:

【中文标题】如何在 Heroku 上托管的 Ruby/Sinatra 应用程序中设置 HTTP 标头?【英文标题】:How do I set HTTP Headers in Ruby/Sinatra app, hosted on Heroku? 【发布时间】:2011-05-11 02:54:50 【问题描述】:

我有一个基于 Ruby 和 Sinatra 的工作应用程序,部署在 Heroku 上。

我想利用 Heroku 上可用的 HTTP 缓存,它使用 Varnish。

我不确定设置标题的最佳方法是什么,以及正确的语法。

对最佳方法和语法有什么想法吗?

before do
    headers "Content-Type" => "text/html; charset=utf8"
end

get '/' do
    headers['Cache-Control'] = 'public, max-age=600'

    # SOME STUFF HERE

    haml :home, :layout => :layout_minfooter

end

【问题讨论】:

【参考方案1】:

在 Sinatra 中,您可以使用 cache_control 方法:

get '/' do
  # Cache for 24 hours
  cache_control :public, max_age: 86400

  # Your magic goes here
end

【讨论】:

【参考方案2】:

通常动态生成的页面没有缓存,所以

response.headers['Cache-Control'] = 'public, max-age=300'

header 是正确的起点。

尝试使用“Use a Web-based service”中的一项服务,看看它们是否显示在从您的站点发回的 HTTPd 标头中。

【讨论】:

看起来我已经正确设置了,通过链接的工具我可以确认。 处理缓存问题是 a** 中的一个痛苦,无论是从客户端还是服务器端。【参考方案3】:

您还可以使用以下语法访问响应对象的标头字段:

response['Cache-Control'] = 'public, max-age=600'

【讨论】:

以上是关于如何在 Heroku 上托管的 Ruby/Sinatra 应用程序中设置 HTTP 标头?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Heroku 上托管的 Ruby/Sinatra 应用程序中设置 HTTP 标头?

如何将客户端的正确 IP 地址获取到 Heroku 上托管的 Node socket.io 应用程序中?

如何将数据从 Heroku 上托管的 Node.js 应用程序发送到托管在完全独立(Cpanel)服务器上的 PHP 文件?

Heroku 上托管的应用程序无法加载网页

python脚本无法在heroku上托管的其他python脚本中调用fn

我需要为 Heroku 上托管的机器人实现分片吗?