从iPad上的websocket连接中获取错误信息

时间:2012-10-25 07:55:38

标签: ipad websocket

我正在尝试实施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以便在我的生命中提取它。据我所知,握手键也是正确的。

2 个答案:

答案 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