从 Mozilla 的文档中,有三种 CORS 场景:
- 简单的请求
- 预检请求
- 使用凭据请求
Simple Requests有一些缺点,例如,当客户端声明时withCredentials,即使服务器拒绝,带有cookie的HTTP请求已经发送,这可能是攻击。
更安全,Preflighted request可以覆盖各种场景。为什么人们发明Simple Requests,即使预先提出的请求可以满足所有要求?
从 Mozilla 的文档中,有三种 CORS 场景:
Simple Requests有一些缺点,例如,当客户端声明时withCredentials,即使服务器拒绝,带有cookie的HTTP请求已经发送,这可能是攻击。
更安全,Preflighted request可以覆盖各种场景。为什么人们发明Simple Requests,即使预先提出的请求可以满足所有要求?
简单的解释是“简单请求”出现在 CORS 存在之前。
XMLHTTPRequest 仅允许对同一来源的请求,或者如果该请求没有引入尚不存在的安全问题,则允许对不同来源的请求。
例如,可以POST通过 HTML<form>向不同的来源发出请求,但您不能以编程方式读取响应。
因此,鉴于这已经成为可能,XMLHTTPRequest 中也不存在该限制是有道理的。
多年后,当 CORS 出现时,重要的是不要破坏那些旧的跨域请求的向后兼容性。如果突然这些请求也需要 CORS 标头,它将破坏依赖它的脚本。
我在 CORS 和no-cors这里写了更多关于这个主题的文章:https ://evertpot.com/no-cors/以获取更多背景信息。