我试图理解CORS,但为什么服务器发送允许访问选项?

时间:2015-07-11 23:46:07

标签: cors

我在MDN网站上看到了这个:

  

让我们看看在这种情况下浏览器将发送服务器的内容,   让我们看看服务器如何响应:

GET /resources/public-data/ HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://foo.example/examples/access-control/simpleXSInvocation.html
Origin: http://foo.example


HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
Server: Apache/2.0.61 
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml

[XML Data]
  

第1 - 10行是Firefox 3.5发送的标题。注意主要   这里注意的HTTP请求头是第10行的Origin:头   上面,它表明调用来自于内容   域http://foo.example

为什么服务器发送此行:

  

Acesss-Control-Allow-Origin:*

     

在这种情况下,服务器以Access-Control-Allow-Origin响应:   *这意味着任何域都可以跨站点方式访问资源。

但是浏览器是否会读取此行并且不允许资源通过,除非允许跨站点请求?为什么这样结构?服务器不应该进行限制而不是接收此行的浏览器吗?

1 个答案:

答案 0 :(得分:1)

CORS 放宽了{/ 3}} 已经内置浏览器的限制; CORS 添加任何安全性!

  

跨域资源共享(CORS)是允许从源自资源的域外的另一个域请求的受限资源 ..的机制。

这需要对抗同源策略,这是由浏览器强制执行的限制;它可以缓解劫持会话,防止不需要的跨域POST请求,并禁止以可通过XSS等方式访问的域之间泄漏数据。

  

.. [在Same-Origin Policy下], Web浏览器允许第一个网页中包含的脚本访问第二个网页中的数据,但仅 两个网页都有相同的来源。

由于浏览器强制执行此限制,浏览器必须删除,这正是Access-Control- *标头所做的:服务器通知浏览器可以请求/访问资源,即使它违反了同源策略。

服务器通过而不是允许CORS来“保护”自身免受与CORS相关的更改。通过这种方式,CORS和同源策略的放松是由远程服务器控制的选择

服务器安全性(以及用户提供的数据的正确处理,非幂等操作,会话等)是一个单独的主题,因为请求可能来自同一个域或在浏览器之外创建;因此,这种安全性与CORS / Same-Origin问题是分开的。