我原以为SOP在发送之前阻止了对其他域的所有请求符合他们的规则,但我在我的机器中做了一个简单的例子,它不是我所期望的:
1-我有一个本地服务器正在侦听端口8000,它将打印发送到/api
URL的POST数据。
2-我有另一台本地服务器,它使用以下脚本提供页面:fetch('http://localhost:8000/api', {method: 'post', body: 'Sending data.'});
。我更改了主机名,以便在浏览器中使用foo.com
访问此页面。
当我访问foo.com
时,我的跨域请求已执行,我可以在Chrome开发工具中看到CORS错误:No 'Access-Control-Allow-Origin' header is present on the requested resource
,但在服务器控制台中仍然收到数据即可。我认为SOP的存在是为了解决这类问题。它的工作方式,只能保证你不能得到回复。是这样吗?几乎所有的网络文件都没有这么说。
我错过了什么?或者我的例子不知何故错了?
答案 0 :(得分:6)
正如你所说的那样,许多人对同一起源政策的防范以及CORS的运作方式产生了很大的误解。
确实发出了请求,服务器处理它并创建响应。它只是阻止客户端访问结果的浏览器。这可能很容易让位于像CSRF这样的攻击。</ p>
预检请求也有一个角色,但这一点并没有改变,相同的原始策略不会停止请求,它会阻止响应到达浏览器中的调用者