与本地服务器相同的原始策略

时间:2014-10-23 21:03:34

标签: jquery ajax same-origin-policy

我正在尝试使用客户端上的JQuery和服务器上的node.js运行基本的Ajax调用。 客户端从与处理Ajax请求的服务器相同的服务器加载 - 但我收到了 在客户端这个错误:

“XMLHttpRequest无法加载....请求的资源上没有'Access-Control-Allow-Origin'标头。因此,不允许访问来源......”

我认为同样的原产地政策肯定不会违反这里?也许当地主人的待遇不同?

服务器:

httpListen.createServer(function (req, res) {
....
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('_testcb(\'{"message": "Hello world!"}\')');
}

客户端:

$.ajax({
        url: "http://127.0.0.1:1337/",
        data : {formType:"ajaxTest", key1:"val1", key2:"vall2"},
        formType:"ajaxTest",
        jsonpCallback: "_testcb",
        cache: false,
        timeout: 5000,
        success: function(data) {
                    $("#textBox").text("replied");
                },
        error: function(jqXHR, textStatus, errorThrown) {
                    alert('error ' + textStatus + " " + errorThrown);
                }
        });

这是在第1回复的指导原则之后写的: how to use jQuery ajax calls with node.js,但我 仍然得到上述错误。

编辑:发现问题:使用localhost而不是127.0.0.1,工作正常......

1 个答案:

答案 0 :(得分:4)

从你的问题,我看到三种可能性:

  1. Same Origin Policy不仅关心服务器,端口也必须与(和协议)相同。因此,除非您使用Cross-Origin Resource Sharing,否则从端口80提供的页面无法向端口1337发送请求。

  2. 或者,如果您从端口1337(这是您用于ajax请求的端口)服务页面,请确保您使用相同的名称来加载页面并提出要求。请注意,127.0.0.1localhost对于SOP目的而言并不相同。

  3. 如果您从文件系统而不是服务器加载页面(例如,页面的URL以file://开头,则双击该文件文件浏览器或其他东西打开它,然后问题是几乎所有事情都不同,从协议开始(file:!= http:)。