【发布时间】:2012-01-24 00:16:44
【问题描述】:
我很难看到 Access-Control-Allow-Origin http 标头的意义。
我认为如果客户端(浏览器)从服务器获得一次“否”,那么它将不会发送任何进一步的请求。但是 chrome 和 firefox 不断发送请求。
谁能告诉我一个真实的例子,这样的标题有意义吗?
谢谢!
【问题讨论】:
标签: http http-headers xss
我很难看到 Access-Control-Allow-Origin http 标头的意义。
我认为如果客户端(浏览器)从服务器获得一次“否”,那么它将不会发送任何进一步的请求。但是 chrome 和 firefox 不断发送请求。
谁能告诉我一个真实的例子,这样的标题有意义吗?
谢谢!
【问题讨论】:
标签: http http-headers xss
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 的供稿。
传统上我们不能对这些数据进行跨域请求。
通过指定允许访问我们资源的其他域,我们现在打开了跨域请求的大门。
【讨论】:
CORS 实现了跨域的两部分安全视图。它试图解决的问题是公共互联网上有许多服务器,这些服务器是由以下人编写的:(a)假设没有浏览器会允许跨域请求,或者(b)没有考虑过完全没有。
因此,有些人希望允许跨域通信,但浏览器构建者并不认为他们可以解锁浏览器并突然暴露所有这些网站。为了避免这种情况,他们发明了一种两部分结构。在浏览器允许与服务器进行跨域交互之前,该服务器必须明确表明它愿意允许跨域访问。在简单的情况下,就是Access-Control-Allow-Origin。在更复杂的情况下,它是完整的 preflight 机制。
服务器必须对其资源实施适当的资源访问控制,这仍然是事实。 CORS 只是为了让服务器向浏览器表明它知道所有问题。
【讨论】: