Javascript 节点js服务器safari客户端连接失败
我有一个简单的html jsnodejs服务器循环作为我的应用程序的测试基础 核心 它可以在Windows8上使用浏览器:IE11、Chrome45、firefox40、opera31。。在safari 5.1.7中失败 这是客户端代码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>
<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