Socket.io获得了糟糕的握手方法"在Firefox上,但不是Chrome或Safari

时间:2016-10-14 02:45:32

标签: socket.io handshake

[这是Github上socket.io问题#2717的副本。那里没有答案,我很想得到一些故障排除提示......]

我有一个测试页面(下面),它创建一个socket.io连接回服务器,然后监听并记录' time'消息。它适用于OSX 10.10.5上最近的Chrome和Safari。我使用Socket.io 1.5.0进行所有测试。

使用Firefox 49.0.1,每个POST请求都会获得bad handshake method的响应。控制台中没有Socket.io connected...消息,并且没有time消息到达(请参见图像)。关于POST的其他有趣信息是:

- Params: EIO:3, t: LUuPeKr, transport:polling
- POST raw data: "1:1"

测试页面连接回一个create-react-app应用程序(0.6.1),该应用程序将请求代理到localhost:3001上我自己的服务器。如上所述,此页面可与Chrome和Safari一起使用。

我可以提供哪些其他信息来调试此内容?

image

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>SOCKET.IO TEST PAGE</title>
</head>
<body>
<h1>Socket.io Test Page</h1>

<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io();
    socket.on('connect', function(data){
        console.log("Socket.io connected...");
    });

    socket.on('time', function (data) {
        console.log(data);
    });
</script>
</body>
</html>

2 个答案:

答案 0 :(得分:6)

我在chrome中也遇到了严重的握手方法错误,并通过降级到socket.io 2.3.1进行了修复,并且与socketio-client相同

答案 1 :(得分:1)

回答我自己的帖子:在github上找到解决方案。 https://github.com/socketio/socket.io/issues/2717讲述了对socket.io代码的修复,以便始终请求&#39; * / *&#39;而不是使用Firefox的默认设置。