Rails:在哪里启用 Access-Control-Allow-Origin
Posted
技术标签:
【中文标题】Rails:在哪里启用 Access-Control-Allow-Origin【英文标题】:Rails: where to enable 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
【参考方案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 不在其中。见***.com/a/21310171/3970701 那么此链接中的教程适用于哪些情况:html5rocks.com/en/tutorials/cors? 哪个链接?我想我们应该拿这个来聊天。 我之前评论中的链接以上是关于Rails:在哪里启用 Access-Control-Allow-Origin的主要内容,如果未能解决你的问题,请参考以下文章