No Access-Control-Allow-Origin标头

时间:2015-10-22 11:30:41

标签: ruby-on-rails ajax cors

我没有想法。我为在学校使用它的朋友制作了一个小应用程序。只要它在非学校互联网上,它工作正常。但是,在学校,有两个按钮不起作用。他们都向不同的控制器发出ajax请求。它们提供no access-control-allow-origin标头错误。我已经尝试了所有可以找到的修复方法,但没有任何方法可行。我没有想法。当前的迭代涉及到我在下面的rack-cors gem。我也试过修复 CORS issue: Getting error "No 'Access-Control-Allow-Origin' header is present" when it actually isXMLHttpRequest No 'Access-Control-Allow-Origin' header is present on the requested resourcehttp://www.yihangho.com/rails-cross-origin-resource-sharing/http://leopard.in.ua/2012/07/08/using-cors-with-rails/。还有什么我可以做的吗?

config.ru

require 'rack/cors'
use Rack::Cors do

  allow do
    origins '*'
    resource '*',
        :headers => :any,
        :methods => [:get, :post, :delete, :put, :options, :patch]
  end
end

application.rb中

config.middleware.insert_before 0, "Rack::Cors" do
   allow do
     origins '*'
     resource '*', headers: :any, methods: [:get, :post, :patch, :options, :put]
   end
end

1 个答案:

答案 0 :(得分:0)

CORS旨在防止跨域XML请求。

我不确定具体原因,但缺点是,如果您尝试使用Ajax命中外部域(未授予CORS权限),则会被拒绝。

  

只要它在非学校互联网上,它就可以正常使用

是的,因为"域"将被视为"本地" 对不起,我误解为" Intranet"。

这取决于您正在访问的服务器 - 您需要确保服务器已启用CORS。

我之前已经处理过类似的问题。

您使用rack-cors完成了正确的事情:

#config/application.rb
config.middleware.insert_before 0, "Rack::Cors" do
   allow do
       origins '*' #-> has to be "*" or specific
       resource '*', headers: :any, methods: [:get, :post, :options]
   end
end

如果您正在使用此功能(请记住,您必须重新启动服务器才能使其正常工作),应该工作。

CORS的主要考虑因素是originresource - 它们必须是" *" (全部),或明确定义(IE google.com或其他)。

在你的情况下,允许他们"所有"应该可以测试 - 然后你需要确保你定义了特定的域名。