我正在尝试实现 websocket 协议,但由于某种原因 iPad 不与我合作。iPad 运行Hybi-00 规范,问题出在握手的某个地方。我正在阅读请求和以下魔术字节,并以我认为正确的答复进行响应。iPad 不同意我并关闭了连接。
协议处理程序适用于大多数现代浏览器运行的Hybi-06 。
我真的很想用某种方法让 iPad 告诉我为什么它决定关闭 websocket 连接,以便我可以解决这个问题。要么就是让 chrome 或其他浏览器将他们的 websocket 版本降级到 iPad 支持的相同版本,这样我就可以得到一些关于实际情况的线索。
有没有办法获取这些信息?
好的,所以,即使解释实际的错误会很好,这里是握手:
GET /myurl HTTP/1.1
Upgrade:WebSocket
Connection:Upgrade
Host:my-host.com
Origin:https://my-host.com
Sec-WebSocket-Key1:1 QB 9 , $169780@8A`@4
Sec-WebSocket-Key2:3 160RhGi7mu 97*66br9
以下八个字节是关键:
{byte[8]}
[0]: 105
[1]: 199
[2]: 161
[3]: 204
[4]: 5
[5]: 176
[6]: 104
[7]: 199
服务器回复这个
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade:WebSocket
Connection:Upgrade
Sec-WebSocket-Origin:https://my-host.com
Sec-WebSocket-Location:ws://my-host.com/
和关键
{byte[16]}
[0]: 100
[1]: 132
[2]: 37
[3]: 58
[4]: 243
[5]: 195
[6]: 173
[7]: 26
[8]: 180
[9]: 239
[10]: 33
[11]: 56
[12]: 40
[13]: 192
[14]: 123
[15]: 255
这是通过 HTTPS 连接运行的,所以它基本上是来自我的调试器的数据,因为我无法正确配置 wireshark 以在我的一生中提取它。据我所知,握手键也是正确的。