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

我试图理解CORS,但为什么服务器发送允许访问选项?,cors,Cors,我在MDN网站上读到: 让我们看看在这种情况下浏览器将向服务器发送什么, 让我们看看服务器如何响应: 第1-10行是Firefox3.5发送的标题。请注意,主要 注意HTTP请求头这里是第10行的Origin:header 这表明调用来自 域名 服务器为什么发送此行: Acesss控件允许原点:* 在这种情况下,服务器会以访问控制允许源代码进行响应: 这意味着任何域都可以跨站点方式访问资源 但是,浏览器是否读取这一行,并且不允许资源传递,除非允许跨站点请求?为什么它的结构是这样的?服务器不应

我在MDN网站上读到:

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

第1-10行是Firefox3.5发送的标题。请注意,主要 注意HTTP请求头这里是第10行的Origin:header 这表明调用来自 域名

服务器为什么发送此行:

Acesss控件允许原点:*

在这种情况下,服务器会以访问控制允许源代码进行响应:

  • 这意味着任何域都可以跨站点方式访问资源
但是,浏览器是否读取这一行,并且不允许资源传递,除非允许跨站点请求?为什么它的结构是这样的?服务器不应该执行限制而不是浏览器接收这一行吗?

放松对已内置浏览器的限制;CORS不添加任何安全性

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

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

。。[在同源策略下],web浏览器允许第一个网页中包含的脚本访问第二个网页中的数据,但前提是两个网页具有相同的源

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

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


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

但有趣的是,我用Rails构建了一个API,我已经可以使用浏览器看到JSON响应,但我无法看到通过另一个前端框架使用API。如果我使用chrome访问端点,它将在我的服务器中没有任何CORS实现的情况下工作。。。这是为什么?@Jwan622 SOP(以及CORS)会影响客户端代码/操作直接“访问”返回数据的能力;它[不一定]影响浏览器工具查看响应的能力。由于SOP应用于浏览器中(通常即使嵌入),这是我对此类查询的唯一“响应”——与原始问题无关——给出了模糊的描述,没有SSCCE。
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]