【问题标题】:Rails: where to enable Access-Control-Allow-OriginRails:在哪里启用 Access-Control-Allow-Origin
【发布时间】:2017-02-21 20:47:02
【问题描述】:

我正在尝试在我的咖啡脚本文件中加载一个链接,如下所示:

$.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/。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:3000' 因此不允许访问。

我还需要做什么才能使这些负载起作用?

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

【问题讨论】:

  • cannot load http://www.example.com/ 你确定用ajax 查询localhost:3000 吗?
  • @amingilani 你能详细说明一下吗?我不确定你在问我什么。
  • 上面的错误是XMLHttpRequest cannot load http://www.example.com/,检查你的ajax代码看看你有没有硬编码example.com
  • 我只是把那个链接作为一个例子。我尝试加载的实际链接也是其他第三方 URL

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


【解决方案1】:

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

例如,您的网站可能是 http://example.com,而您正尝试向 http://example.net 发送 AJAX 请求。由于 example.net 不受您的控制,因此您无法控制其 CORS 设置,Rack::Cors 也无法控制。这意味着如果 example.net 已禁止 AJAX 请求,您将无能为力。

与您尝试调用的服务的管理员交谈,看看您是否可以说服他们允许 AJAX 请求(至少来自您的域)。

【讨论】:

    【解决方案2】:

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

    这是针对CSRF 攻击的措施。有关 CORS 工作原理的说明,请参阅 this 答案。

    【讨论】:

    • 这些网站是公共域
    • @rigdonmr 是的,但他们不允许来自他们自己域之外的 ajax 请求。基本上,当您的浏览器向 siteA 发送来自 siteLocalhost 的请求时,siteA 会为您的浏览器提供该请求应该来自的域的白名单,而 siteLocalhost 不在其中。见stackoverflow.com/a/21310171/3970701
    • 那么此链接中的教程适用于哪些情况:html5rocks.com/en/tutorials/cors
    • 哪个链接?我想我们应该拿这个来聊天。
    • 我之前评论中的链接
    猜你喜欢
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2017-06-15
    • 2016-09-30
    • 2015-06-17
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多