违反同源策略但数据已发送

Same origin policy violation but data gets send

我正在用 java 脚本编写一个小跟踪器。该跟踪器仅获取当前访问的网站以及所有需要的信息。它还跟踪 ajax 事件。对应的是一个 java 程序,它与网络服务器托管在同一台机器上,但侦听不同的端口。由于同源策略(不同端口),我的 javascript 程序应该无法发送数据。 chrome 中的控制台告诉我:

XMLHttpRequest cannot load http://127.0.0.1:8082/posts. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access.

我不明白的是,数据已发送到服务器!我在不同的机器上(使用不同的 ip)仔细检查过这个。我只是想了解为什么。我没有自己写发送方法,所以我不太明白。

//sending data to server-tracker
function sendData(data)
{
    console.log("Sending data: ");
    console.log(data);
    var xhr = window.XMLHttpRequest
        ? new window.XMLHttpRequest()
        : window.ActiveXObject
        ? new ActiveXObject('Microsoft.XMLHTTP')
        : null;
    xhr.open('POST', "http://127.0.0.1:8082/posts", true);
    xhr.send(data);
}

感谢您的帮助。

同源策略主要阻止JavaScript读取来自其他来源的数据。

它有一些功能可以防止在某些 情况下发送 数据到其他来源。这些可以概括为"when the request couldn't have been constructed using an HTML form"。这些触发 preflight request 请求允许发送实际请求。

Cross Origin Request Forgery 这是一个不同的问题,最好通过使用 Synchronizer Token 解决(它存储在站点的 HTML 文档中(因此它只能由发起的请求发送来自该站点)和用户会话(用于比较提交的会话)。