Javascript 节点js服务器safari客户端连接失败

Javascript 节点js服务器safari客户端连接失败,javascript,node.js,safari,cors,Javascript,Node.js,Safari,Cors,我有一个简单的html jsnodejs服务器循环作为我的应用程序的测试基础 核心 它可以在Windows8上使用浏览器:IE11、Chrome45、firefox40、opera31。。在safari 5.1.7中失败 这是客户端代码 <html> <head> <meta charset="UTF-8"> <script language="javascript"> var url="http://127.0.0.1:1001"; func

我有一个简单的html jsnodejs服务器循环作为我的应用程序的测试基础 核心

它可以在Windows8上使用浏览器:IE11、Chrome45、firefox40、opera31。。在safari 5.1.7中失败

这是客户端代码

<html>
<head>
<meta charset="UTF-8"> 
<script language="javascript">
var url="http://127.0.0.1:1001";

function sendData(rawData) {

    var strout="";
    var data=encodeURIComponent(rawData);
    var xhr = new XMLHttpRequest();
    xhr.open('POST', url, true);
    xhr.onreadystatechange=function(){
          if (xhr.readyState==4 && xhr.status==200){
            strout=decodeURIComponent(xhr.responseText);
            document.getElementById("opResult").innerHTML="srv-sent "+strout
            }
        }

    xhr.send(data);
    alert("sent = "+rawData)
}

//+++++++++++++++++++
function send(){
var v=document.getElementById("ta").value;
sendData(v);
}
</script>

</head>
<body>
<input type="button" value="send" onclick="send()">
<br>
<textarea id="ta" cols=40 rows=10> </textarea>
<br>
<div id="opResult"></div>
</body>
</html>
为了完成web模拟,我正在运行(安装了npm)http服务器(端口8080),客户端是index.html中的一个链接

仿真简单;在客户端的文本框中键入一些内容,单击send,您将获得

在opResult div.中显示响应,除了safari,其他所有内容都显示响应

调试代码显示safari发送一条空白消息。。。CORS问题

狩猎专家请提供建议。

(底部总结)

问题 我需要一个静态文件服务器(http服务器:8080)为应用程序提供服务, 和一个应用程序文件/数据存储服务器:1001

这是您当前的模型:客户端访问静态数据,应用程序/数据作为两种不同的(wiki)访问:

(当前模式:客户端从两个来源接收内容)
http服务器:8080─┐            ┌─> 节点:1001

└─> 客户端访问站点时,URL栏是否指向
127.0.0.1:1001
?它指向localhost:8080(节点http服务器目录);index.html将显示在浏览器中。这里有一个指向safaritest.html、test ap的链接。其中包含上面的html。它连接到127.0.0.1:1001(safari中的例外)safari对跨源请求非常非常挑剔。我很确定它区分了“localhost”和127.0.0.1,所以这是CORS的攻击。此外,您正在使用不同的端口;还有另一个CORS的进攻。如果您打开错误控制台(开发->显示错误控制台),并将任何相关错误发布到此处或作为问题的编辑,这将非常有用。错误控制台是空的,尽管我想我以前可能见过它(| |红鲱鱼?)。这就是为什么我猜测这是一个CORS问题,在这种情况下,可能有一个标题解决方案?!?不管怎样,我都无法在safari上运行最简单的基于节点的web应用程序,而且我不相信在节点或safari社区中都可以。为此,我需要一个为应用程序提供服务的静态文件服务器(http服务器:8080)和一个应用程序文件/数据存储服务器:1001。如果safari看到localhost=127.0.0.1,无法处理不同端口的IO,然后是toast,我看不出来。。我一定错过了什么!我的坏脾气是不耐烦。我再次运行测试,这次我等待超时后出现错误;我们的怀疑是,有两个错误:XMLHttpRequest无法加载。访问控制不允许原点允许原点。现在你知道问题了吗。。。?!?非常感谢詹姆斯。。我已经在跟踪选项2(确定服务器头,寻找正确的客户端头)。因此,我在xhr.open之后添加了xhr.setRequestHeader(“内容类型”、“文本/普通”);真不敢相信这么容易。在所有浏览器和all-a-ok上重新测试。
var http = require('http');

http.createServer(function(request, response){
    var postData="",cmdQ=[],resout=[];

    if (request.method == 'POST') {
      request.on('data', function (data) {
         postData += data;
      });
    }
    console.log("SRV got data:"+postData);
    request.on('end', function () {
    console.log("got post: "+decodeURIComponent(postData));
    resout="SRVRep: got "+decodeURIComponent(postData);
    response.writeHead(200, {
             'Content-Type': 'text/html',
             'Access-Control-Allow-Origin' : '*',
     'Access-Control-Allow-Headers':'Origin, X-Requested-With, Content-Type, Accept'
             }); 
        response.end(encodeURIComponent(resout), "utf-8");  
        console.log("sent "+resout);
        post_data="";
    });

}).listen(1001,'127.0.0.1');
console.log("server initialized to port 1001");
(current model: client receives content from two origins)

http-server:8080 ─┐            ┌─> node:1001
                  └─> client <─┘
(reverse-proxy model: everything comes from localhost:8080)

node:1001 <─────> apache or nginx:8080 <──┐
                                          └─> client