【问题标题】:What is the point of the Access-Control-Allow-Origin http header?Access-Control-Allow-Origin http 标头的意义何在?
【发布时间】:2012-01-24 00:16:44
【问题描述】:

我很难看到 Access-Control-Allow-Origin http 标头的意义。

我认为如果客户端(浏览器)从服务器获得一次“否”,那么它将不会发送任何进一步的请求。但是 chrome 和 firefox 不断发送请求。

谁能告诉我一个真实的例子,这样的标题有意义吗?

谢谢!

【问题讨论】:

    标签: http http-headers xss


    【解决方案1】:

    Access-Control-Allow-Origin 标头应包含“允许”访问资源的来源列表。

    因此,确定哪些域可以向您的服务器请求资源。

    例如,发回 Access-Control-Allow-Origin: * 的标头将允许所有站点访问请求的资源。

    另一方面,发回Access-Control-Allow-Origin: http://foo.example.com 将只允许访问http://foo.example.com

    Mozilla Developer Site 上有更多相关信息

    例如

    假设我们在自己的域中有一个 URL,该 URL 返回艺术家音乐专辑的 JSON 集合。它可能看起来像这样:

    http://ourdomain.com/GetAlbumsByArtist/MichaelJackson.json
    

    我们可能会在我们的网站上使用一些 AJAX 来获取此 JSON 数据,然后将其显示在我们的网站上。

    但是,如果其他站点的某个人希望自己使用我们的 JSON 对象怎么办?也许我们拥有另一个网站http://subdomain.ourdomain.com,并希望使用来自ourdomain.com 的供稿。

    传统上我们不能对这些数据进行跨域请求。

    通过指定允许访问我们资源的其他域,我们现在打开了跨域请求的大门。

    【讨论】:

    • 谢谢!是的,我已经阅读了 mozdev 的文章。但我还是不明白。你能举一个 foo.example.com 有意义的真实例子吗?
    • 我添加了一个简短的示例。我希望这能为您澄清事情,如果没有,也许您有更具体的问题?
    • 很高兴这是有道理的@clamp 如果您觉得这回答了您的问题,请点击接受按钮。 :-)
    【解决方案2】:

    CORS 实现了跨域的两部分安全视图。它试图解决的问题是公共互联网上有许多服务器,这些服务器是由以下人编写的:(a)假设没有浏览器会允许跨域请求,或者(b)没有考虑过完全没有。

    因此,有些人希望允许跨域通信,但浏览器构建者并不认为他们可以解锁浏览器并突然暴露所有这些网站。为了避免这种情况,他们发明了一种两部分结构。在浏览器允许与服务器进行跨域交互之前,该服务器必须明确表明它愿意允许跨域访问。在简单的情况下,就是Access-Control-Allow-Origin。在更复杂的情况下,它是完整的 preflight 机制。

    服务器必须对其资源实施适当的资源访问控制,这仍然是事实。 CORS 只是为了让服务器向浏览器表明它知道所有问题。

    【讨论】:

    • 这应该是公认的答案,因为它首先解决了 CORS 存在的原因。 CORS 基本上是一个“NO TRESPASSING”标志,但方向错误。它的唯一目的是追溯保护写得不好的服务器免受来自主流浏览器的请求。 CORS 提供绝对零安全性,并且仅用于混淆跨站点请求模式。
    猜你喜欢
    • 2016-01-11
    • 2018-10-28
    • 2019-02-07
    • 2013-08-02
    • 1970-01-01
    • 2016-01-21
    • 2018-07-18
    • 2019-03-18
    • 2018-10-20
    相关资源
    最近更新 更多