与本地服务器同源策略

Posted

技术标签:

【中文标题】与本地服务器同源策略【英文标题】:same origin policy with local server 【发布时间】:2014-12-19 16:08:51 【问题描述】:

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

“XMLHttpRequest 无法加载 .... 请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此,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);
                
        );

这是在此处第一个回复的指导方针之后写的: how to use jQuery ajax calls with node.js,但我是 仍然收到上述错误。

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

【问题讨论】:

【参考方案1】:

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

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

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

    如果您从文件系统而不是服务器加载页面(例如,页面的 URL 以 file:// 开头,您在文件资源管理器中双击该文件或打开它的东西),那么问题是几乎所有东西都不同,从协议开始(file: != http:)。

【讨论】:

感谢您的回答,页面是从与 ajax 目标 (1337) 相同的端口加载的 但是关于 localhost 和 127.0.0.1 之间区别的一个好点 - 实际上这是问题的关键,请参阅我编辑的问题。

以上是关于与本地服务器同源策略的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个本地文件的同源策略违规绕过到另一个本地文件?

Chrome:禁用本地主机的同源策略

有没有办法忽略本地提供的网页的同源策略(文件:///)[重复]

ng2 与 node expree get 与post 数据

Ajax

跨域请求