我有一个只读API,它在本地运行良好,可以在Vagrant设置下运行。在我的Heroku应用程序上,由于CORS错误,每个API请求都被拒绝:“请求的资源上不存在‘访问控制-允许-原产地’头。因此不允许访问。”
在我的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语句,该语句将不会显示在我的控制台中,其馀的输出也不会出现在我的控制台中。
我不知所措。希望有人在这方面有一些经验。谢谢。
编辑:,我也跟随了葡萄CORS指令,但是得到了相同的结果。
成功。I使用了机架 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
发布于 2015-02-09 00:58:39
每次提出请求时,您都会得到访问控制允许源错误。
这可能是因为您的服务器API不使用CORS所需的标头响应选项请求。
如果您正在使用Google,可以在开发控制台->网络选项卡中检查它。
有趣的是,一些Javascript框架在将普通请求发送到服务器之前确实会发出选项请求。
解决方案:
*如果启动rails服务器时出错,请在“run”之后检查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头的所有选项请求。
https://stackoverflow.com/questions/26998151
复制