【问题标题】:Same origin policy violation but data gets send违反同源策略但数据被发送
【发布时间】:2016-08-01 17:48:52
【问题描述】:

我正在用 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);
}

感谢您的帮助。

【问题讨论】:

  • 同源策略只会停止响应。没有请求就没有响应,因此必须交付它。如果要阻止来自其他域的请求,则必须自己在服务器应用程序中处理。
  • 我真的不知道,谢谢!

标签: javascript same-origin-policy


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 2016-11-13
    • 2017-07-22
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2015-01-19
    • 2010-11-28
    相关资源
    最近更新 更多