Access-Control-Allow-Origin http标头有什么意义?

时间:2012-01-23 16:03:49

标签: http http-headers xss

我很难看到Access-Control-Allow-Origin http标头的重点。

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

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

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

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

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

Mozilla Developer Site

上有关于此的更多信息

例如

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

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

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

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

传统上我们无法对此数据提出跨域请求。

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

答案 1 :(得分:2)

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

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

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