CORS:简单请求的目的是啥?

Posted

技术标签:

【中文标题】CORS:简单请求的目的是啥?【英文标题】:CORS: what's the purpose of Simple Request?CORS:简单请求的目的是什么? 【发布时间】:2020-10-21 10:50:55 【问题描述】:

来自 Mozilla 的 documentation,有三种 CORS 场景:

    简单的请求 预检请求 使用凭据请求

Simple Requests有一些缺点,例如,当客户端声明withCredentials时,即使服务器拒绝,带有cookie的HTTP请求已经发送,这可能是攻击。

Preflighted request更安全,可以覆盖各种场景。为什么人们发明Simple Requests,即使预先发送的请求可以满足所有要求?

参考

    What exactly does the Access-Control-Allow-Credentials header do?

【问题讨论】:

【参考方案1】:

简单的解释是“简单请求”出现在 CORS 存在之前。

XMLHTTPRequest 仅允许来自同一来源的请求,或者如果该请求没有引入不存在的安全问题,则允许不同来源的请求。

例如,可以通过 html <form> 向不同来源发出 POST 请求,但您无法以编程方式读取响应。

因此,鉴于这已经成为可能,因此 XMLHTTPRequest 中也不存在该限制是有道理的。

多年后,当 CORS 出现时,重要的是不要破坏那些旧的跨域请求的向后兼容性。如果突然这些请求也需要 CORS 标头,它将破坏依赖它的脚本。

我在这里写了更多关于这个主题、CORS 和 no-cors 的内容:https://evertpot.com/no-cors/ 以获得更多背景信息。

【讨论】:

以上是关于CORS:简单请求的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 CORS 请求上 POST 之前使用 OPTION 请求的原因是啥? [复制]

fetch.js是啥

CORS 错误:配置 Symfony 5 以接受 CORS 的正确方法是啥?

CORS:为什么需要将请求分类为简单?

为啥这个简单的 CORS 请求会进行飞行前选项检查

cors跨域之简单请求与预检请求(发送请求头带令牌token)