我在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响应: *这意味着任何域都可以跨站点方式访问资源。
但是浏览器是否会读取此行并且不允许资源通过,除非允许跨站点请求?为什么这样结构?服务器不应该进行限制而不是接收此行的浏览器吗?
答案 0 :(得分:1)
CORS 放宽了{/ 3}} 已经内置浏览器的限制; CORS 不添加任何安全性!
跨域资源共享(CORS)是允许从源自资源的域外的另一个域请求的受限资源 ..的机制。
这需要对抗同源策略,这是由浏览器强制执行的限制;它可以缓解劫持会话,防止不需要的跨域POST请求,并禁止以可通过XSS等方式访问的域之间泄漏数据。
.. [在Same-Origin Policy下], Web浏览器允许第一个网页中包含的脚本访问第二个网页中的数据,但仅 两个网页都有相同的来源。
由于浏览器强制执行此限制,浏览器必须删除,这正是Access-Control- *标头所做的:服务器通知浏览器可以请求/访问资源,即使它违反了同源策略。
服务器通过而不是允许CORS来“保护”自身免受与CORS相关的更改。通过这种方式,CORS和同源策略的放松是由远程服务器控制的选择。
服务器安全性(以及用户提供的数据的正确处理,非幂等操作,会话等)是一个单独的主题,因为请求可能来自同一个域或在浏览器之外创建;因此,这种安全性与CORS / Same-Origin问题是分开的。