рукопожатие веб-сокета python (RFC 6455)

Я пытаюсь реализовать простой веб-сервер на python, используя протокол RFC 6455. Я взял формат рукопожатия из здесьи здесь.

Я использую Chromium 17 и Firefox 11 в качестве клиентов и получаю следующую ошибку:

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11

Я ожидаю увидеть приветствие с серверав своем браузере и привет от клиентав журнале сервера.

Думаю, у меня неправильное рукопожатие, не могли бы вы указать мне на мою ошибку?

Журнал сервера, запрос:

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:8999
Origin: null
Sec-WebSocket-Key: 8rYWWxsBPEigeGKDRNOndg==
Sec-WebSocket-Version: 13

Журнал сервера, ответ:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: 3aDXXmPbE5e9i08zb9mygfPlCVw=

Необработанный ответ:

HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 3aDXXmPbE5e9i08zb9mygfPlCVw=\r\n\r\n

Код сервера:

import socket
import re
from base64 import b64encode
from hashlib import sha1

websocket_answer = (
    'HTTP/1.1 101 Switching Protocols',
    'Upgrade: websocket',
    'Connection: Upgrade',
    'Sec-WebSocket-Accept: {key}\r\n\r\n',
)

GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8999))
s.listen(1)

client, address = s.accept()
text = client.recv(1024)
print text

key = (re.search('Sec-WebSocket-Key:\s+(.*?)[\n\r]+', text)
    .groups()[0]
    .strip())

response_key = b64encode(sha1(key + GUID).digest())
response = '\r\n'.join(websocket_answer).format(key=response_key)

print response
client.send(response)

print client.recv(1024)
client.send('hello from server')

Код клиента:




    test
    
    




6
задан John Smith 14 April 2012 в 08:50
поделиться