Google chrome websocket总是使用Chrome触发onerror(未定义),但不使用Firefox

Google chrome websocket总是使用Chrome触发onerror(未定义),但不使用Firefox,google-chrome,firefox,websocket,undefined,onerror,Google Chrome,Firefox,Websocket,Undefined,Onerror,使用在Cygwin中运行的websocket服务器(C程序),该服务器负责握手和回显来自客户端的消息 在Firefox(13.0.1版)中,双方合作得非常好——握手、接收和回复 但是对于Chrome(版本23.0.1271.97 m),在握手步骤之后,客户端总是触发onerror——“未定义”,然后再次关闭 我想知道: Firefox和Chrome在处理websocket时有什么不同吗 以下是HTML代码(感谢stackoverflow guys的贡献): 使用Chrome的数据日志: webs

使用在Cygwin中运行的websocket服务器(C程序),该服务器负责握手和回显来自客户端的消息

在Firefox(13.0.1版)中,双方合作得非常好——握手、接收和回复

但是对于Chrome(版本23.0.1271.97 m),在握手步骤之后,客户端总是触发onerror——“未定义”,然后再次关闭

我想知道: Firefox和Chrome在处理websocket时有什么不同吗

以下是HTML代码(感谢stackoverflow guys的贡献):

使用Chrome的数据日志:

websocket server received:
0001  47 45 54 20 2f 73 65 72 76 69 63 65 20 48 54 54 GET /service HTT
0002  50 2f 31 2e 31 0d 0a 55 70 67 72 61 64 65 3a 20 P/1.1..Upgrade:
0003  77 65 62 73 6f 63 6b 65 74 0d 0a 43 6f 6e 6e 65 websocket..Conne
0004  63 74 69 6f 6e 3a 20 55 70 67 72 61 64 65 0d 0a ction: Upgrade..
0005  48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 3a Host: localhost:
0006  38 30 38 30 0d 0a 4f 72 69 67 69 6e 3a 20 6e 75 8080..Origin: nu
0007  6c 6c 0d 0a 53 65 63 2d 57 65 62 53 6f 63 6b 65 ll..Sec-WebSocke
0008  74 2d 4b 65 79 3a 20 6a 79 38 30 61 2b 50 72 73 t-Key: jy80a+Prs
0009  35 48 71 62 36 62 58 50 2f 43 58 51 51 3d 3d 0d 5Hqb6bXP/CXQQ==.
0010  0a 53 65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 56 .Sec-WebSocket-V
0011  65 72 73 69 6f 6e 3a 20 31 33 0d 0a 53 65 63 2d ersion: 13..Sec-
0012  57 65 62 53 6f 63 6b 65 74 2d 45 78 74 65 6e 73 WebSocket-Extens
0013  69 6f 6e 73 3a 20 78 2d 77 65 62 6b 69 74 2d 64 ions: x-webkit-d
0014  65 66 6c 61 74 65 2d 66 72 61 6d 65 0d 0a 0d 0a eflate-frame....

websocket server sent:
0001  48 54 54 50 2f 31 2e 31 20 31 30 31 20 53 77 69 HTTP/1.1 101 Swi
0002  74 63 68 69 6e 67 20 50 72 6f 74 6f 63 6f 6c 73 tching Protocols
0003  0d 0a 55 70 67 72 61 64 65 3a 20 77 65 62 73 6f ..Upgrade: webso
0004  63 6b 65 74 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e cket..Connection
0005  3a 20 55 70 67 72 61 64 65 0d 0a 53 65 63 2d 57 : Upgrade..Sec-W
0006  65 62 53 6f 63 6b 65 74 2d 41 63 63 65 70 74 3a ebSocket-Accept:
0007  20 4d 39 2f 58 41 4e 67 35 52 32 58 4f 4d 50 49  M9/XANg5R2XOMPI
0008  4d 67 2f 54 6b 50 38 6e 5a 38 67 6f 3d 0d 0a 53 Mg/TkP8nZ8go=..S
0009  65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 50 72 6f ec-WebSocket-Pro
0010  74 6f 63 6f 6c 3a 20 63 68 61 74 0d 0a 0d 0a    tocol: chat....

Sent OKAY.
伙计们

以下是我在这个问题上的经验。 昨天,我的php简单聊天套接字脚本在firefox和chrome中都运行良好。突然间,它在今天的chrome中不起作用了。不知道为什么?但是在打印请求头值之后,我发现头长度超过1024字节。 (我通过在没有登录的域下获取server.php中的1024字节进行测试)。 也许在我登录域之后,缓存长度被添加到http请求头中

在执行握手之前,我将socket_read函数的长度值增加到5120字节。该值足以获取完整的请求标头。 我的问题解决了,因为server.php握手函数可以从请求头验证sec websocket密钥

希望其他人注意websocket请求头的长度

问候,,

我自己想出来的,所以我的经验可以帮助别人。默认情况下,websocket服务器会回复任何带有字段“Sec websocket Protocol:chat”的握手数据包,这与Firefox没有问题,但Chrome不接受该字段,因为它不会发送该字段进行握手;所以只需删除该字段,然后全部设置;谢谢大家关注这个帖子。你如何删除这个字段?我目前正在尝试从Qt5.4运行ssl websocket服务器。示例代码,但虽然服务器运行正常(在将证书文件手动复制到构建目录后),但我无法使用html文件连接到它。只有C++示例客户端才能工作。现在我不希望你们知道Qt,我只想知道如何访问握手字段。
websocket server received:
0001  47 45 54 20 2f 73 65 72 76 69 63 65 20 48 54 54 GET /service HTT
0002  50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 6c 6f 63 P/1.1..Host: loc
0003  61 6c 68 6f 73 74 3a 38 30 38 30 0d 0a 55 73 65 alhost:8080..Use
0004  72 2d 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 r-Agent: Mozilla
0005  2f 35 2e 30 20 28 57 69 6e 64 6f 77 73 20 4e 54 /5.0 (Windows NT
0006  20 36 2e 31 3b 20 57 4f 57 36 34 3b 20 72 76 3a  6.1; WOW64; rv:
0007  31 33 2e 30 29 20 47 65 63 6b 6f 2f 32 30 31 30 13.0) Gecko/2010
0008  30 31 30 31 20 46 69 72 65 66 6f 78 2f 31 33 2e 0101 Firefox/13.
0009  30 2e 31 0d 0a 41 63 63 65 70 74 3a 20 74 65 78 0.1..Accept: tex
0010  74 2f 68 74 6d 6c 2c 61 70 70 6c 69 63 61 74 69 t/html,applicati
0011  6f 6e 2f 78 68 74 6d 6c 2b 78 6d 6c 2c 61 70 70 on/xhtml+xml,app
0012  6c 69 63 61 74 69 6f 6e 2f 78 6d 6c 3b 71 3d 30 lication/xml;q=0
0013  2e 39 2c 2a 2f 2a 3b 71 3d 30 2e 38 0d 0a 41 63 .9,*/*;q=0.8..Ac
0014  63 65 70 74 2d 4c 61 6e 67 75 61 67 65 3a 20 65 cept-Language: e
0015  6e 2d 75 73 2c 65 6e 3b 71 3d 30 2e 35 0d 0a 41 n-us,en;q=0.5..A
0016  63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 ccept-Encoding:
0017  67 7a 69 70 2c 20 64 65 66 6c 61 74 65 0d 0a 43 gzip, deflate..C
0018  6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 2d onnection: keep-
0019  61 6c 69 76 65 2c 20 55 70 67 72 61 64 65 0d 0a alive, Upgrade..
0020  53 65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 56 65 Sec-WebSocket-Ve
0021  72 73 69 6f 6e 3a 20 31 33 0d 0a 4f 72 69 67 69 rsion: 13..Origi
0022  6e 3a 20 6e 75 6c 6c 0d 0a 53 65 63 2d 57 65 62 n: null..Sec-Web
0023  53 6f 63 6b 65 74 2d 4b 65 79 3a 20 61 41 48 6e Socket-Key: aAHn
0024  63 31 77 66 6e 68 39 39 53 6d 59 67 4d 50 6b 4d c1wfnh99SmYgMPkM
0025  57 77 3d 3d 0d 0a 50 72 61 67 6d 61 3a 20 6e 6f Ww==..Pragma: no
0026  2d 63 61 63 68 65 0d 0a 43 61 63 68 65 2d 43 6f -cache..Cache-Co
0027  6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 65 0d ntrol: no-cache.
0028  0a 55 70 67 72 61 64 65 3a 20 77 65 62 73 6f 63 .Upgrade: websoc
0029  6b 65 74 0d 0a 0d 0a                            ket....

websocket server sent:
0001  48 54 54 50 2f 31 2e 31 20 31 30 31 20 53 77 69 HTTP/1.1 101 Swi
0002  74 63 68 69 6e 67 20 50 72 6f 74 6f 63 6f 6c 73 tching Protocols
0003  0d 0a 55 70 67 72 61 64 65 3a 20 77 65 62 73 6f ..Upgrade: webso
0004  63 6b 65 74 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e cket..Connection
0005  3a 20 55 70 67 72 61 64 65 0d 0a 53 65 63 2d 57 : Upgrade..Sec-W
0006  65 62 53 6f 63 6b 65 74 2d 41 63 63 65 70 74 3a ebSocket-Accept:
0007  20 74 66 48 33 51 6f 70 47 2f 61 50 78 49 4c 65  tfH3QopG/aPxILe
0008  55 75 49 39 48 38 34 46 49 35 63 77 3d 0d 0a 53 UuI9H84FI5cw=..S
0009  65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 50 72 6f ec-WebSocket-Pro
0010  74 6f 63 6f 6c 3a 20 63 68 61 74 0d 0a 0d 0a    tocol: chat....

Sent OKAY.

websocket server received:
0001  81 8b 75 cb 87 1a 3d ae eb 76 1a eb d0 75 07 a7 ..u...=..v...u..
0002  e3                                              .

websocket server sent:
...
websocket server received:
0001  47 45 54 20 2f 73 65 72 76 69 63 65 20 48 54 54 GET /service HTT
0002  50 2f 31 2e 31 0d 0a 55 70 67 72 61 64 65 3a 20 P/1.1..Upgrade:
0003  77 65 62 73 6f 63 6b 65 74 0d 0a 43 6f 6e 6e 65 websocket..Conne
0004  63 74 69 6f 6e 3a 20 55 70 67 72 61 64 65 0d 0a ction: Upgrade..
0005  48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 3a Host: localhost:
0006  38 30 38 30 0d 0a 4f 72 69 67 69 6e 3a 20 6e 75 8080..Origin: nu
0007  6c 6c 0d 0a 53 65 63 2d 57 65 62 53 6f 63 6b 65 ll..Sec-WebSocke
0008  74 2d 4b 65 79 3a 20 6a 79 38 30 61 2b 50 72 73 t-Key: jy80a+Prs
0009  35 48 71 62 36 62 58 50 2f 43 58 51 51 3d 3d 0d 5Hqb6bXP/CXQQ==.
0010  0a 53 65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 56 .Sec-WebSocket-V
0011  65 72 73 69 6f 6e 3a 20 31 33 0d 0a 53 65 63 2d ersion: 13..Sec-
0012  57 65 62 53 6f 63 6b 65 74 2d 45 78 74 65 6e 73 WebSocket-Extens
0013  69 6f 6e 73 3a 20 78 2d 77 65 62 6b 69 74 2d 64 ions: x-webkit-d
0014  65 66 6c 61 74 65 2d 66 72 61 6d 65 0d 0a 0d 0a eflate-frame....

websocket server sent:
0001  48 54 54 50 2f 31 2e 31 20 31 30 31 20 53 77 69 HTTP/1.1 101 Swi
0002  74 63 68 69 6e 67 20 50 72 6f 74 6f 63 6f 6c 73 tching Protocols
0003  0d 0a 55 70 67 72 61 64 65 3a 20 77 65 62 73 6f ..Upgrade: webso
0004  63 6b 65 74 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e cket..Connection
0005  3a 20 55 70 67 72 61 64 65 0d 0a 53 65 63 2d 57 : Upgrade..Sec-W
0006  65 62 53 6f 63 6b 65 74 2d 41 63 63 65 70 74 3a ebSocket-Accept:
0007  20 4d 39 2f 58 41 4e 67 35 52 32 58 4f 4d 50 49  M9/XANg5R2XOMPI
0008  4d 67 2f 54 6b 50 38 6e 5a 38 67 6f 3d 0d 0a 53 Mg/TkP8nZ8go=..S
0009  65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 50 72 6f ec-WebSocket-Pro
0010  74 6f 63 6f 6c 3a 20 63 68 61 74 0d 0a 0d 0a    tocol: chat....

Sent OKAY.