1

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

4

2 回答 2

0

Hybi-06 是协议的一个版本,它只是一个规范,如果我没记错的话,实际上没有任何浏览器实现该版本。我认为大多数浏览器都使用了 Hybi-10,然后是 Hybi-17(Rfc6455),正如你所说的 iOS 目前使用的是 Hybi00。有几个服务器支持该特定握手。我也知道有一些支持草稿的每个版本。

我运行XSockets.NET,我们选择支持 Hybi-00 和 RFC6455 版本,因为它们是在浏览器中实现的协议。(Safari 仍在 Hybi00 上)

在 RFC6455 中有一个关于支持多协议的部分;

https://www.rfc-editor.org/rfc/rfc6455#page-26

如果您正在实施某事,我的建议是执行 RFC6455

于 2012-10-25T12:33:30.850 回答
0

看看这个线程

正如 Cybear 所指出的,我建议升级到 iOS6。目前的统计数据显示,大约 60% 的 iOS 用户在 iOS6 上

于 2012-10-25T09:33:02.147 回答