加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Grape API和Heroku的CORS问题

发布时间:2020-12-17 03:17:47 所属栏目:百科 来源:网络整理
导读:我有一个只读API,它在本地使用Vagrant设置很好.在我的Heroku应用程序上运行,由于CORS错误,每个API请求都被拒绝:“请求的资源上没有’Access-Control-Allow-Origin’标头.因此不允许原点’null’访问.” 在我的API的基类中,我有以下设置标题: module API cl
我有一个只读API,它在本地使用Vagrant设置很好.在我的Heroku应用程序上运行,由于CORS错误,每个API请求都被拒绝:“请求的资源上没有’Access-Control-Allow-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

我怀疑在调用之前没有被触发 – 如果我在其中使用puts语句,那么该语句不会出现在我的控制台中,其余的输出.

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

编辑:我也跟着Grape’s CORS instructions但得到了相同的结果.

成功.我使用了rack-cors宝石以及以下内容:

#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

解决方法

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

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

您可以在开发控制台中查看它 – >网络标签,如果您使用的是谷歌浏览器.

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

解:

>修改您的Gemfile以包含’rack-cors’.
>运行捆绑安装
>修改你的config.ru:

*如果启动rails服务器时出错,请在“运行”后检查您的API命名空间

require 'rack/cors'

use Rack::Cors do
  allow do
    origins '*'
    resource '*',headers: :any,methods: [:get,:put]
  end
end

run API::V1::Base

现在您应该看到Grape使用CORS头处理所有OPTIONS请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读