【问题标题】:No Access-Control-Allow-Origin header没有 Access-Control-Allow-Origin 标头
【发布时间】:2016-01-21 16:04:20
【问题描述】:

我没有想法。我为在学校使用它的朋友制作了一个小应用程序。只要它在非学校互联网上,它就可以正常工作。但是,在学校,有两个按钮不起作用。他们都向不同的控制器发出 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

应用程序.rb

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

【问题讨论】:

  • 你遇到了什么错误?
  • 请求资源上没有 access-control-allow-origin 标头。因此不允许使用 Origin(我的域名)
  • 我给你写答案

标签: ruby-on-rails ajax cors


【解决方案1】:

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 或其他)。

在您的情况下,允许它们“全部”进行测试应该是可以的 - 然后您需要确保您定义了特定的域。

【讨论】:

  • 我试过重启服务器,还是不行。为什么互联网在一个地方会考虑本地域,但在学校却不会?
猜你喜欢
  • 1970-01-01
  • 2017-09-19
  • 2015-04-02
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多