HTML5 / PHP WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:200

Posted

技术标签:

【中文标题】HTML5 / PHP WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:200【英文标题】:HTML5 / PHP WebSocket connection to failed: Error during WebSocket handshake: Unexpected response code: 200 【发布时间】:2018-02-09 11:19:37 【问题描述】:

我认为有些人只是喜欢按“这个问题没有显示任何研究成果;不清楚或没有用”按钮。我真不知道他们想证明什么?

如果您认为或认为这个问题没有任何意义,请先发表评论,然后再进行计算

我正在尝试从浏览器连接到我的 php 套接字服务器。这是我得到的错误。

我确实从 *** 检查了所有不同的帖子,但没有任何帮助。

当我使用 WS 时。它工作正常。当我使用 WSS 时,它不起作用。

“WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码: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();
;

;

【问题讨论】:

我需要你帮助解决同样的问题。我无法弄清楚问题 我可以如何帮助你@HarshSanghani 【参考方案1】:

我发现了问题并解决了。这是问题所在,在我的 ProxyPass 中,我将 wss 传递给 wss。在我的情况下,它假设是 wss 到 ws。

我的旧代码(错误的)是

ProxyPass "/wss/"  "wss://localhost:9090/wss"

我的新代码(正确的)是

ProxyPass "/wss"  "ws://localhost:9090"

【讨论】:

以上是关于HTML5 / PHP WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:200的主要内容,如果未能解决你的问题,请参考以下文章

html5的websocket怎么在服务器端配置php

php+websocket搭建简易聊天室实践

php 简单实现webSocket(demo)

多个 HTML5 WebSocket 连接

php是如何实现websocket实时消息推送的

HTML5 php websocket