HTML5 / PHP WebSocket 连接失败:WebSocket 握手期间出错:意外的响应代码:200
HTML5 / PHP WebSocket connection to failed: Error during WebSocket handshake: Unexpected response code: 200
我认为有些人只是喜欢按 "This question does not show any research effort; it is unclear or not useful" 按钮。真不知道他们想证明什么?
如果您认为或认为这个问题没有任何意义,请先发表评论再进行计算
我正在尝试从浏览器连接到我的 PHP 套接字服务器。这是我收到的错误。
我确实从 Whosebug 检查了所有不同的 post,但没有任何帮助。
当我使用 WS 时。它工作正常。当我使用 WSS 时它不工作。
"WebSocket connection to failed: Error during WebSocket handshake: Unexpected response code: 200"
这是我的 apache 配置
ServerName 192.168.56.106
ProxyRequests off
ProxyPass "/ws/" "ws://localhost:9090/ws"
ProxyPass "/wss/" "wss://localhost:9090/wss"
JS
function socketClient(vSocketIdentifications) {
console.log("I AM IN");
var $cHost = "192.168.56.106";
var $cPort = 9090;
// this.wsUri = "wss://" + $cHost +":" + $cPort;
/*
* ENABLE THIS WHEN IN PRODUCTIONS
*
*/
if (window.location.hostname == $cHost){
this.wsUri = "ws://" + $cHost + ":" + $cPort;
} else {
this.wsUri = ((window.location.protocol === "https:") ? "wss://" :
"ws://") + window.location.hostname + ":" + $cPort;
}
this.socket = "";
//create a new WebSocket object.
this.socket = new WebSocket(this.wsUri);
/*Let socket know who you are?*/
var msg = {
msgFrom: vSocketIdentifications,
msg: "Hi",
msgClient: "js"
};
this.socket.onopen = () => this.socket.send(JSON.stringify(msg));
// Send text to all users through the server
function sendInitMsgToServer() {
// Construct a msg object containing the data the server needs to
process the message from the chat client.
var msg = {
msgFrom: vSocketIdentifications,
msg: "Hi"
};
// Send the msg object as a JSON-formatted string.
this.socket.send(JSON.stringify(msg));
}
//#### Message received from server?
this.socket.onmessage = function(ev) {
var msg = JSON.parse(ev.data); //PHP sends Json data
console.log(msg);
var type = msg.type; //message type
var umsg = msg.message; //message text
var uname = msg.name; //user name
var ucolor = msg.color; //color
if(type == 'usermsg')
{
//$('#message_box').append("<div><span class=\"user_name\" style=\"color:#"+ucolor+"\">"+uname+"</span> : <span class=\"user_message\">"+umsg+"</span></div>");
if(umsg!=""){
document.getElementById("information").innerHTML=umsg+"<br/>";
}else{
document.getElementById("progress").style.display="none";
document.getElementById("information").innerHTML="I am done . What Next ? "+"<br/>";
}
}
};
this.closeSocket = function() {
this.socket.close();
};
};
我发现并解决了问题。这就是问题所在,在我的 ProxyPass 中,我将 wss 传递给 wss。在我的情况下,它应该是 wss 到 ws。
我的旧代码(错误的)是
ProxyPass "/wss/" "wss://localhost:9090/wss"
我的新密码(正确的)是
ProxyPass "/wss" "ws://localhost:9090"
我认为有些人只是喜欢按 "This question does not show any research effort; it is unclear or not useful" 按钮。真不知道他们想证明什么?
如果您认为或认为这个问题没有任何意义,请先发表评论再进行计算
我正在尝试从浏览器连接到我的 PHP 套接字服务器。这是我收到的错误。
我确实从 Whosebug 检查了所有不同的 post,但没有任何帮助。
当我使用 WS 时。它工作正常。当我使用 WSS 时它不工作。
"WebSocket connection to failed: Error during WebSocket handshake: Unexpected response code: 200"
这是我的 apache 配置
ServerName 192.168.56.106
ProxyRequests off
ProxyPass "/ws/" "ws://localhost:9090/ws"
ProxyPass "/wss/" "wss://localhost:9090/wss"
JS
function socketClient(vSocketIdentifications) {
console.log("I AM IN");
var $cHost = "192.168.56.106";
var $cPort = 9090;
// this.wsUri = "wss://" + $cHost +":" + $cPort;
/*
* ENABLE THIS WHEN IN PRODUCTIONS
*
*/
if (window.location.hostname == $cHost){
this.wsUri = "ws://" + $cHost + ":" + $cPort;
} else {
this.wsUri = ((window.location.protocol === "https:") ? "wss://" :
"ws://") + window.location.hostname + ":" + $cPort;
}
this.socket = "";
//create a new WebSocket object.
this.socket = new WebSocket(this.wsUri);
/*Let socket know who you are?*/
var msg = {
msgFrom: vSocketIdentifications,
msg: "Hi",
msgClient: "js"
};
this.socket.onopen = () => this.socket.send(JSON.stringify(msg));
// Send text to all users through the server
function sendInitMsgToServer() {
// Construct a msg object containing the data the server needs to
process the message from the chat client.
var msg = {
msgFrom: vSocketIdentifications,
msg: "Hi"
};
// Send the msg object as a JSON-formatted string.
this.socket.send(JSON.stringify(msg));
}
//#### Message received from server?
this.socket.onmessage = function(ev) {
var msg = JSON.parse(ev.data); //PHP sends Json data
console.log(msg);
var type = msg.type; //message type
var umsg = msg.message; //message text
var uname = msg.name; //user name
var ucolor = msg.color; //color
if(type == 'usermsg')
{
//$('#message_box').append("<div><span class=\"user_name\" style=\"color:#"+ucolor+"\">"+uname+"</span> : <span class=\"user_message\">"+umsg+"</span></div>");
if(umsg!=""){
document.getElementById("information").innerHTML=umsg+"<br/>";
}else{
document.getElementById("progress").style.display="none";
document.getElementById("information").innerHTML="I am done . What Next ? "+"<br/>";
}
}
};
this.closeSocket = function() {
this.socket.close();
};
};
我发现并解决了问题。这就是问题所在,在我的 ProxyPass 中,我将 wss 传递给 wss。在我的情况下,它应该是 wss 到 ws。
我的旧代码(错误的)是
ProxyPass "/wss/" "wss://localhost:9090/wss"
我的新密码(正确的)是
ProxyPass "/wss" "ws://localhost:9090"