【问题标题】:CORS issue using Grape API and Heroku使用 Grape API 和 Heroku 的 CORS 问题
【发布时间】:2015-05-21 06:21:32
【问题描述】:

我有一个只读 API,它在本地与 Vagrant 设置配合得很好。在我的 Heroku 应用上,每个 API 请求都因 CORS 错误而被拒绝:“请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此不允许访问 Origin 'null'。”

在我的 API 的基类中,我有以下设置标题:

module API
  class Base < Grape::API
    before do
      headers['Access-Control-Allow-Origin'] = '*'
      headers['Access-Control-Allow-Methods'] = 'GET, OPTIONS'
      headers['Access-Control-Request-Method'] = '*'
      headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
    end

    mount API::V1::Base   
  end
end

我怀疑这个 before 调用没有被触发 - 如果我在其中使用 puts 语句,则该语句不会与其余输出一起出现在我的控制台中。

我很茫然。希望有人对此有一些经验。谢谢。

编辑:我也关注了Grape's CORS instructions,但得到了相同的结果。

成功。我使用了rack-cors gem 和以下:

#application.rb
config.middleware.use Rack::Cors do
  allow do
    origins '*'

    # location of your API
    resource '/api/*', :headers => :any, :methods => [:get, :post, :options, :put]
  end
end

【问题讨论】:

    标签: ruby-on-rails api heroku cors


    【解决方案1】:

    每次发出请求时都会出现 Access-Control-Allow-Origin 错误。

    这可能是因为您的服务器 API 没有响应带有 CORS 所需标头的 OPTIONS 请求。

    如果您使用的是 Google Chrome,您可以在开发控制台 -> 网络选项卡中查看它。

    有趣的是,一些 Javascript 框架确实会在正常请求发送到服务器之前发出 OPTIONS 请求。

    解决方案:

    1. 修改您的 Gemfile 以包含 'rack-cors'
    2. 运行捆绑安装
    3. 修改您的 config.ru

    *如果你在启动 Rails 服务器时遇到错误,请在“运行”后检查你的 API 命名空间

    require 'rack/cors'
    
    use Rack::Cors do
      allow do
        origins '*'
        resource '*', headers: :any, methods: [:get, :post, :options, :put]
      end
    end
    
    run API::V1::Base
    

    现在您应该看到 Grape 处理所有带有 CORS 标头的 OPTIONS 请求。

    【讨论】:

    • 是的,我已经在我的原始帖子中发布了成功的解决方案。谢谢。
    • 哦。我刚刚意识到我从葡萄文档中复制的答案不包括选项方法。现在更新了。 ([:get, :post, :options, :put] 而不是 :get)
    • 只需注意rails框架,在config.ru中,在run Rails.application行之前添加行run API::V1::Base
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2019-05-21
    • 2013-11-21
    • 1970-01-01
    • 2021-12-26
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多