Ruby on rails 使用葡萄API和Heroku发布CORS
我有一个只读的API,它在本地运行良好,有一个流浪设置。在我的Heroku应用程序上直播,由于CORS错误,每个API请求都被拒绝:“请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问Origin'null。” 在API的基类中,我有以下设置头:Ruby on rails 使用葡萄API和Heroku发布CORS,ruby-on-rails,api,heroku,cors,Ruby On Rails,Api,Heroku,Cors,我有一个只读的API,它在本地运行良好,有一个流浪设置。在我的Heroku应用程序上直播,由于CORS错误,每个API请求都被拒绝:“请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问Origin'null。” 在API的基类中,我有以下设置头: module API class Base < Grape::API before do headers['Access-Control-Allow-Origin'] = '
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
每次发出请求时都会出现访问控制允许源错误 这可能是因为您的服务器API没有使用CORS所需的头响应选项请求 如果您正在使用Google Chrome,您可以在开发控制台->网络选项卡中查看它 有趣的是,一些Javascript框架确实在向服务器发送正常请求之前发出了一个选项请求 解决方案:
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标题处理所有选项请求。是的,我在最初的帖子中已经发布了成功的解决方案。谢谢。我刚刚意识到我从grape docs复制的答案没有包括选项方法。现在已经更新了。([:get,:post,:options,:put]而不是just:get)只需注意rails框架,在config.ru中,在line
run rails.application之前添加linerun API::V1::Base
require 'rack/cors'
use Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :options, :put]
end
end
run API::V1::Base