同源策略违规而得到的数据发送
问题描述:
我对在javascript写几句跟踪。这个跟踪器只是获取当前访问的网站所有需要的信息。它也跟踪阿贾克斯事件。对方是一个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)。我只是想明白为什么。我没有自己写发送方法,这就是为什么我没有真正理解它。
//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。
它具有防止发送数据到某些情况下的其他来源的一些功能。这些可以概括为“当请求不能使用HTML表单构建时”。这些会触发preflight request请求发送实际请求的权限。
Cross Origin Request Forgery这是一个不同的问题,最好通过使用Synchronizer Token(它存储在站点上的HTML文档中(所以它只能由从该站点发起的请求发送)和用户会话中解决(这是用来比较提交的)。
同源策略只会停止响应。如果没有的请求没有任何反应,ERGO它交付使用。如果你希望阻止来自其他领域的要求,那么你必须处理在服务器应用程序自己。 – Archer
我真的不知道,谢谢! – mudvayne
不客气:) – Archer