【问题标题】:Passing headers (or other settings) from Sinatra through Puma通过 Puma 从 Sinatra 传递标头(或其他设置)
【发布时间】:2020-07-30 23:44:29
【问题描述】:

我正在尝试学习如何使用纯 Ruby 开发一个简单的网络应用程序。我有一个作为 Sinatra 应用程序创建的简单后端服务。在开发它时,我注意到前端(一个简单的 HTML/JS 静态站点)由于 CORS 策略而无法与其通信。所以我研究了如何从 Sinatra 传递标头。

我遇到了sinatra-cors。我按照说明进行了设置,我的应用看起来像这样(缩写):

require 'sinatra'
require 'sinatra/cors'

  set :allow_origin, '*'
  set :allow_methods, 'GET,HEAD,POST'
  set :allow_headers, 'content-type,if-modified-since,access-control-allow-methods,access-control-allow-origin'
  set :expose_headers, 'content-disposition'
  set :allow_credentials, true

  post '/' do
    [...]
  end

当我使用ruby app.rb 运行它时,它运行良好。前端可以通信并遵守 CORS 政策。

现在,我想为生产环境设置服务。为此,我想使用 Puma。所以对于 Puma,我有一个 config.ru,它看起来像这样:

require File.expand_path('app', File.dirname(__FILE__))
run WebApp

我修改了我的app.rb 看起来像这样(再次缩写):

require 'sinatra'
require 'sinatra/cors'

class WebApp < Sinatra::Application

  set :allow_origin, '*'
  set :allow_methods, 'GET,HEAD,POST'
  set :allow_headers, 'content-type,if-modified-since,access-control-allow-methods,access-control-allow-origin'
  set :expose_headers, 'content-disposition'
  set :allow_credentials, true

  post '/' do
    [...]
  end
end

基本上,将应用程序包装在一个类中,并从config.ru 调用它。当我通过在目录中运行 puma 来运行它时,服务会出现,但标头不再被传回。每当我尝试访问后端时,我都会得到:

Access to XMLHttpRequest at 'http://localhost:4567/' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是我最初设置标题之前遇到的错误。所以我很清楚set 参数被忽略了。

所以,这似乎是一件简单的事情,但我一直无法找到正确的答案:如何让 Puma 尊重“设置”参数?或者,我如何获得相同的预期结果?

我似乎很清楚我错过了一件非常简单的事情,但我无法弄清楚它到底是什么。

提前致谢!

【问题讨论】:

    标签: ruby cors rack puma response-headers


    【解决方案1】:

    看来您只是在课堂上缺少register Sinatra::Cors

    class WebApp < Sinatra::Application
      register Sinatra::Cors # Add this line.
    
      set :allow_origin, '*'
      # etc.
    

    【讨论】:

    • 成功了!现在我必须去了解register 的作用。非常感谢您的快速回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2019-03-25
    • 2020-01-01
    • 1970-01-01
    • 2021-06-21
    • 2013-06-09
    • 1970-01-01
    相关资源
    最近更新 更多