【问题标题】:I am trying to understand CORS but why does the server send the allow access option?我想了解 CORS,但为什么服务器会发送允许访问选项?
【发布时间】:2015-09-30 12:18:54
【问题描述】:

我在 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 请求标头是 Origin: 第 10 行的标头 上面,这表明调用来自 域名http://foo.example

为什么服务器会发送此行:

访问控制允许来源:*

在这种情况下,服务器以 Access-Control-Allow-Origin 响应:

  • 这意味着该资源可以被任何域以跨站点的方式访问。

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

【问题讨论】:

    标签: cors


    【解决方案1】:

    CORS 放宽Same-Origin Policy 已经内置浏览器的限制; CORS 不会增加任何安全性!

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

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

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

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

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

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

    【讨论】:

    • 但有趣的是,我使用 Rails 构建了一个 API,并且我已经可以使用我的浏览器看到 JSON 响应,但是我看不到通过另一个前端框架使用该 api。如果我使用 chrome 访问端点,它可以在我的服务器中没有任何 CORS 实现的情况下工作......为什么会这样?
    • @Jwan622 SOP(以及 CORS)影响客户端代码/操作直接“访问”返回数据的能力;它不会 [必然] 影响浏览器工具查看响应的能力。由于 SOP is 应用 in browsers (通常即使是嵌入的),这是我可以对这样一个查询给出的唯一“响应” - 这与原始问题无关- 给出了模糊的描述,没有 SSCCE。
    猜你喜欢
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2020-08-10
    • 2017-03-27
    • 2020-05-03
    • 2020-05-29
    • 2021-07-05
    • 2019-09-01
    相关资源
    最近更新 更多