【发布时间】:2011-07-21 21:18:20
【问题描述】:
我在 Python (based in this gist) 中创建了一个 websockets 服务器,它可以在 localhost 中运行,但不能在生产服务器中运行。
例如,在 localhost 我有以下握手消息:
//Message from webbrowser client
GET / HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: 127.0.0.1:8080
Origin: null
Sec-WebSocket-Key1: ]2 415 401 032v
Sec-WebSocket-Key2: 2y7 9Y2o 80049 5
Cookie: (...)
t��t`��
//Response of server
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: null
WebSocket-Location: ws://127.0.0.1:8080/
Sec-Websocket-Origin: null
Sec-Websocket-Location: ws://127.0.0.1:8080/
�@2�J��3@5��ƶ
当我在生产中运行同一个 webssocket 的服务器时,连接失败。在 Chrome 的控制台中,我收到以下错误:“WebSocket 握手期间出错:'Connection' 标头值不是'Upgrade'” - 但在服务器和客户端之间的握手消息中,连接(来自服务器)是正确的价值:
//Message from webbrowser client
GET / HTTP/1.0
Host: myserver.com
X-Forwarded-Host: myserver.com
X-Forwarded-Server: myserver.com
X-Forwarded-For: 189.6.133.224
Connection: close
Upgrade: WebSocket
Origin: http://myserver.com
Sec-WebSocket-Key1: 2 1)Gz 11919la 978
Sec-WebSocket-Key2: c94Q6b9^ef#`6 2v {652
Cookie: (...)
//Response of server
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://myserver.com
WebSocket-Location: ws://myserver.com/websocket/server
Sec-Websocket-Origin: http://myserver.com
Sec-Websocket-Location: ws://myserver.com/websocket/server
yz�~�r}��+�4J
在生产中,我在客户的消息中得到了一些陌生人值:
- 消息末尾的疯狂代码在哪里?
- 'Connection'标头的值是'close'?!
有人知道我为什么会收到此错误以及为什么客户端握手具有这些值吗?
【问题讨论】: