我正在尝试实施websocket协议,由于某种原因,iPad没有与我合作。 iPad运行Hybi-00 specification,问题出在握手的某个地方。我正在阅读请求和下面的魔术字节,并回应我认为是正确的答复。 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以便在我的生命中提取它。据我所知,握手键也是正确的。
答案 0 :(得分:0)
请看this thread。
Cybear指出,我建议升级到iOS6。目前的统计数据显示around 60% of overall iOS users are on iOS6。
答案 1 :(得分:0)
Hybi-06是协议的一个版本,只是一个规范,如果我没有错,实际上没有任何浏览器实现该版本。我认为大多数浏览器都是Hybi-10然后用于Hybi-17(Rfc6455),正如你所说iOS目前使用的是Hybi00。有几个服务器支持该特定握手。我也知道有一些支持每一个版本的草稿。
我运行XSockets.NET,我们选择支持Hybi-00和RFC6455版本,因为它们是浏览器中实现的协议。 (Safari仍然在Hybi00上)
与RFC6455一样,有一节涉及支持多协议;
http://tools.ietf.org/html/rfc6455#page-26
如果您正在实施某些内容,我的建议是执行RFC6455