我以为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的存在正好解决了这种问题。它的工作方式,它只保证你不能得到回应。是这样吗?几乎所有的网络文件都没有这么说。
我错过了什么?或者我的例子错了吗?
现在我终于可以再次入睡,感谢您的解释。关于飞行前请求,他们有什么作用?为什么不是所有的'简单请求',我肯定没有得到它的价值,因为主要的观点是浏览器只是为了阻止响应。延迟问题比通过调用忽略响应的端点更糟糕。 –