违反同源策略但数据已发送
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 文档中(因此它只能由发起的请求发送来自该站点)和用户会话(用于比较提交的会话)。
我正在用 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 文档中(因此它只能由发起的请求发送来自该站点)和用户会话(用于比较提交的会话)。