NoN*_*ded 7 browser api rest http
在调用其他域时,在实际POST,UPDATE,PUT或DELETE请求之前发送OPTION请求的原因是什么?(所以关于CORS请求)我知道它应该检查服务器是否可以处理真实请求,但为什么不立即发送真实请求?
我想到的一些原因:
有人可以了解浏览器供应商在调用其他域时实施OPTION请求的原因吗?
Bar*_*ard 22
CORS基本上是一个浏览器安全功能,而不是服务器端.
默认情况下,浏览器不允许某些跨源请求.您正在与之交谈的服务器可以发布使用跨源请求是否安全,但是客户端是理解并使用该信息的,因此提供的保护不是服务器.
因此,对于GET请求,您可以获取资源,检查CORS标头,然后根据标头决定是否处理它.很好,很简单.
对于POST(或其他更改)事件,它不是那么简单.你发出POST请求,服务器处理它(记住服务器不关心CORS,只关心浏览器)并发回响应.浏览器看到CORS未启用并忽略响应,但到那时为时已晚 - POST请求已在服务器端处理,所有阻止的是显示已处理的结果.因此,对于网上银行应用程序,例如,转移资金的恶意请求意味着资金将被转移,但您的浏览器将忽略"成功转移资金"的响应 - 因为资金消失和恶意请求造成损失很大反正可能会忽略回应!
因此,在知道响应中的CORS标头之前,您无法发送请求 - 这需要发送请求!鸡肉和鸡蛋的情况.
因此,浏览器向相同的地址发送OPTIONS请求,该地址不会像POST请求那样改变任何内容,但会返回CORS头.之后,浏览器知道发送真实请求是否安全.
而且服务器没有实现CORS安全性的原因是,改变Referrer头部非常容易,因此无论如何它都不会提供任何保护.该服务器将具有其他安全功能(如检查会话是有效的,并授权给发出请求),但CORS是为了防止攻击的一个地方,这些并不能帮助(例如,用户在登录到网上银行的另一个选项卡上).
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |