Rails:在哪里启用Access-Control-Allow-Origin

时间:2016-10-12 21:49:37

标签: javascript ruby-on-rails ajax coffeescript cors

我试图在我的coffeescript文件中加载链接,如下所示:

$.ajax hobby.link,
  type: 'GET'
  dataType: 'html'
  error: (jqXHR, textStatus, errorThrown) ->
    console.log "AJAX Error"
  success: (data, textStatus, jqXHR) ->
    console.log "Successful AJAX call"

已安装

gem 'rack-cors', :require => 'rack/cors'

并添加了

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

到我的application.rb,但每次我得到

  

XMLHttpRequest无法加载http://www.example.com/。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:3000'因此不允许访问。

我还需要做些什么才能使这些负载有效?

请注意,我目前正在执行ajax调用连续三个不同的链接。

2 个答案:

答案 0 :(得分:0)

错误代码表明您尝试加载的第三方网站不允许来自其自己域外的请求。这不是您的应用程序的问题,它们不允许不属于自己域名的请求。

这是针对CSRF攻击的措施。有关CORS如何工作的解释,请参阅this答案。

答案 1 :(得分:0)

Rack::Cors处理允许或拒绝您自己的网站和域名的CORS。它不会影响任何其他域的CORS配置。

例如,您的网站可能是http://example.com,并且您正在尝试向http://example.net发送AJAX请求。由于example.net不在您的控制范围内,因此您无法控制其CORS设置,Rack::Cors也不会。这意味着如果exam​​ple.net不允许使用AJAX请求,则无法对其执行任何操作。

与您尝试拨打的服务的管理员联系,看看您是否可以说服他们允许AJAX请求(至少来自您的域名)。