我正在用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);
}
感谢您的帮助。
答案 0 :(得分:1)
同源策略主要阻止来自其他来源的读取数据的JavaScript。
它有一些功能可以阻止在某些情况下向其他来源发送数据。这些可以概括为“当使用HTML表单无法构造请求时”。这些会触发preflight request请求发送实际请求的权限。
Cross Origin Request Forgery这是一个不同的问题,最好通过使用Synchronizer Token(存储在网站上的HTML文档中(因此它只能通过从该网站发起的请求发送)和用户的会话(用于比较提交的会话)。