相同的原始策略违规但数据会被发送

时间:2016-08-01 08:53:49

标签: javascript same-origin-policy

我正在用javascript编写一个小跟踪器。该跟踪器只是获取当前访问过的网站,其中包含所有需要的信息。它还跟踪ajax事件。对应的是一个java程序,它与Web服务器托管在同一台机器上,但是监听不同的端口。我的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)。我只想了解原因。我没有自己编写send方法,这就是为什么我没有真正得到它。

//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);
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

它有一些功能可以阻止某些情况下向其他来源发送数据。这些可以概括为“当使用HTML表单无法构造请求时”。这些会触发preflight request请求发送实际请求的权限。

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