Ste*_*hen 6 api ruby-on-rails heroku cors
我有一个只读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
Run Code Online (Sandbox Code Playgroud)
我怀疑这个before调用没有被触发 - 如果我在其中使用puts语句,那么该语句不会出现在我的控制台中,其余的输出.
我很茫然.希望有人对此有一些经验.谢谢.
编辑:我也遵循了Grape的CORS指令,但得到了相同的结果.
成功.我使用了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
Run Code Online (Sandbox Code Playgroud)
每次发出请求时都会出现Access-Control-Allow-Origin错误.
这可能是因为您的服务器API没有响应带有CORS所需标头的OPTIONS请求.
如果您使用的是谷歌浏览器,则可以在开发控制台 - >网络选项卡中进行检查.
有趣的是,一些Javascript框架在将正常请求发送到服务器之前确实发出了OPTIONS请求.
解:
*如果启动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
Run Code Online (Sandbox Code Playgroud)
现在您应该看到Grape使用CORS头处理所有OPTIONS请求.
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |