【问题标题】:Sec-WebSocket-Accept mismatchSec-WebSocket-Accept 不匹配
【发布时间】:2012-07-05 21:39:08
【问题描述】:

我目前正在用 Python 开发一个 WebSocket 服务器,但我显然无法计算 Sec-WebSocket-Accept,这通常不是很困难。 这是我的计算函数(用 Python 编写):

def get_accept_websocket_key(self, key):
    magic_string = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
    key += magic_string
    return base64.b64encode(hashlib.sha1(key).hexdigest())

我所有的结果似乎都很好,但我总是在 javascript 控制台中:

WebSocket 握手期间出错:Sec-WebSocket-Accept 不匹配

你有什么解决办法吗?

谢谢。

【问题讨论】:

  • 您使用哪个浏览器作为您的客户端?
  • Ubuntu 下的谷歌浏览器 18.0.1025.168。 ;-)
  • 所以您正在实施规范的 RFC 6455 版本?
  • 我找到了解决方案...我需要使用digest()而不是hexdigest(),我的错...

标签: javascript python websocket


【解决方案1】:

工作示例。 使用“Sec-WebSocket-Protocol”查找代码

from base64 import b64encode, b64decode
from hashlib import sha1

def sendHeaers(self, connect)
    data = ["HTTP/1.1 101 Switching Protocols",
            "\r\nUpgrade: websocket",
            "\r\nConnection: Upgrade"]

    if 'Sec-WebSocket-Protocol' in self.httpHeader:
        data.append("\r\nSec-WebSocket-Protocol: webserver")

    if 'Sec-WebSocket-Key' in self.httpHeader:
        sha1f = sha1()
        sha1f.update(self.httpHeader['Sec-WebSocket-Key'] + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
        ticket = b64encode(sha1f.digest())
        data.append("\r\nSec-WebSocket-Accept: " + ticket)

    data.append("\r\n\r\n")
    connect.send( "".join(data) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多