为啥客户端不接受我的 WebSocket 响应握手?

Posted

技术标签:

【中文标题】为啥客户端不接受我的 WebSocket 响应握手?【英文标题】:Why does the client not accept my WebSocket response handshake?为什么客户端不接受我的 WebSocket 响应握手? 【发布时间】:2011-10-14 02:07:11 【问题描述】:

我使用 Chrome 14。这是我的 python websocket 服务器代码 sn-p:

                    global guid
                    key = hashlib.sha1(headers['Sec-WebSocket-Key']+guid).digest()
                    key.encode('iso-')
                    headers['Sec-WebSotycket-Accept'] = base64.b64encode(key)
                    print headers['Sec-WebSocket-Accept']
                    handshake = '\
    HTTP/1.1 101 Switching Protocols\r\n\
    Upgrade: %s\r\
    Connection: %s\r\
    Sec-WebSocket-Accept: %s\r\
    Sec-WebSocket-Protocol: base64\r\
     ' %(headers['Upgrade'],headers['Connection'],headers['Sec-WebSocket-Accept'])
                    try:
                        self.conn.send(handshake)
                    except Exception as e:
                        print e

为什么 Chrome 客户端不接受此服务器发送握手?

Request URL:ws://127.0.0.1:1234/

Request Headers

Connection:Upgrade
Host:127.0.0.1:1234
Sec-WebSocket-Key:xuV2xuiXxqL4Hwcxjg9dJA==
Sec-WebSocket-Origin:null
Sec-WebSocket-Version:8
Upgrade:websocket
(Key3):00:00:00:00:00:00:00:00

【问题讨论】:

您能否发布 Chrome 提出的请求? (查看 chrome://net-internals/ -> 套接字 -> 查看实时套接字 -> 选择您的 websocket。确保首先选中“数据”选项卡中右侧的复选框。) 或者您可以发送一个请求密钥和您发送的响应密钥吗? 【参考方案1】:

可能是您的服务器代码的第 4 行吗?您的键“Sec-WebSotycket-Accept”看起来拼写错误。

【讨论】:

以上是关于为啥客户端不接受我的 WebSocket 响应握手?的主要内容,如果未能解决你的问题,请参考以下文章

MozWebSocket 不响应握手

webSocket 握手期间的错误意外响应代码:400

Websocket 服务器握手响应

Python 服务器 Websocket 握手响应

C# WebSocket - 握手期间客户端没有响应

WebSocket 握手期间出错:意外的响应代码:302