从 iPad 上的 websocket 连接中获取错误信息
Posted
技术标签:
【中文标题】从 iPad 上的 websocket 连接中获取错误信息【英文标题】:Getting error information out of a websocket connect on iPad 【发布时间】:2012-10-25 07:55:38 【问题描述】:我正在尝试实现 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 以在我的一生中提取它。据我所知,握手键也是正确的。
【问题讨论】:
你能把你的服务器收到的握手请求和它发送的响应贴出来吗? ...或您服务器的 Hybi-00 握手代码 它被埋得很深,并以几种不同的语言存在。而且,这也不全是我的。我正在代理对另一台服务器的调用并处理内容。我怀疑它与主机和来源有关,因为调用实际上在没有代理的情况下工作。 如果不能提供代码,可以用wireshark抓取握手请求/响应吗? 我会尝试一下。需要在附近的某个地方找到 iPad。需要一段时间,但我会得到它 【参考方案1】:看this thread。
正如 Cybear 所指出的,我建议升级到 ios6。当前统计显示around 60% of overall iOS users are on iOS6。
【讨论】:
如果他们允许我强制使用 iOS6,我会这样做。但是,如果我能真正完成这项工作并找出这里似乎存在问题的原因,那就太酷了。【参考方案2】: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
【讨论】:
以上是关于从 iPad 上的 websocket 连接中获取错误信息的主要内容,如果未能解决你的问题,请参考以下文章
使用 Amp\Websocket 从打开的流连接中获取 websocket ping?
使用部署在 CentOS 服务器上的 Latchet 框架时,无法从 webapp 的 JS 建立 websocket 连接
连接打开后如何从javax websocket服务器获取消息
由于 BoringSSL 证书验证失败,iOS 上的安全 websocket 连接失败