2016-09-15 49 views
0

我以为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的存在正好解决了这种问题。它的工作方式,它只保证你不能得到回应。是这样吗?几乎所有的网络文件都没有这么说。

我错过了什么?或者我的例子错了吗?

回答

5

就像你说的那样,这是很多人对同一起源政策的保护以及CORS如何工作的一个很大的误解。

确实发出请求,服务器处理它并创建响应。只有浏览器阻止客户端访问结果。这可能很容易让位给像CSRF这样的攻击。

预检请求也有一定的作用,但该点不会改变,同一个来源策略不会停止请求,它会停止在浏览器中到达调用者的响应。

+0

现在我终于可以再次入睡,感谢您的解释。关于飞行前请求,他们有什么作用?为什么不是所有的'简单请求',我肯定没有得到它的价值,因为主要的观点是浏览器只是为了阻止响应。延迟问题比通过调用忽略响应的端点更糟糕。 –