如果我点击链接,Heroku 上的 Sinatra 应用会以 Forbidden 响应

Sinatra app on Heroku responds with Forbidden if I follow links

我创建了一个 Sinatra 小应用程序并使用 Puma 运行 它。我已经将我的应用程序部署到 Heroku 并且一切正常,但是如果我跟随外部 link 到我的应用程序,我会得到响应 Forbidden。这是从哪里来的?

该应用只定义了一种 HTTP 方法:

require 'sinatra'

get '/' do
  headers 'Content-Type' => 'application/json'
  body 'Hello World'
end

例如,在 https://contactsampleprovider.herokuapp.com/ 之后会得到 Forbidden,但在浏览器中手动输入 URL 也可以正常工作。

如果我省略 headers 调用,一切都会按预期进行。

这是机架保护的一项功能,如果您将内容类型设置为 JSON,它似乎会自动启用。它可以通过

禁用
set :protection, :except => [:json_csrf]

Sinatra and Rack protection.

这个问题中的示例所述