【问题标题】:Sec-WebSocket-Key Index Error On AndroidAndroid上的Sec-WebSocket-Key索引错误
【发布时间】:2013-12-14 11:23:32
【问题描述】:

我正在尝试用 php 实现 WebSocket。在我的台式电脑上它可以正常工作。但是当我尝试在安卓设备上打开我的网站时。我的服务器实现在握手时出现以下错误。

未定义索引:Sec-WebSocket-Key

然后我检查了这些值。当我使用台式计算机浏览器连接到网站时,标头在标头中包含 Sec-WebSocket-Key 索引。但是当我从安卓设备连接到网站时,Header 包含 Sec-WebSocket-Key1 和 Sec-WebSocket-Key2,但没有 Sec-WebSocket-Key。因此,它会引发异常。这个问题有什么解决办法吗?我是否需要两种 websokcet 实现,一种用于移动设备,一种用于桌面设备?

提前致谢。

【问题讨论】:

  • 检查发送请求的安卓代码。如果您应该只有一个密钥(Sec-WebSocket-Key),请检查它为什么发送多个重复项。否则,更改 PHP 代码以接受 Sec-WebSocket-Key1 或/和 Sec-WebSocket-Key2。
  • @MohammadReza 没有安卓代码,都到达同一个网站。但是从桌面它发送一个Sec-WebSocket-Key,从android设备它发送两个,Sec-WebSocket-Key1和Sec-WebSocket-Key2。

标签: php android html websocket


【解决方案1】:

Sec-WebSocket-Key1Sec-WebSocket-Key2 来自 websocket 提案的早期实验草案。

https://datatracker.ietf.org/doc/html/draft-hixie-thewebsocketprotocol-76#section-8.4

这意味着您的 android 设备(无论是浏览器还是某些 websocket 库)不支持最终的RFC6455 WebSocket 标准。

要知道你的安卓设备使用的是什么版本...

  • 寻找Sec-WebSocket-Version 标头,如果找到,那就是你的版本。
    • 版本 13 是 RFC-6455(最终规范)
  • 寻找Sec-WebSocket-Draft 标头,如果找到,那就是您的草稿(非最终)版本。
  • 这两个都不是,你有一个超级早期的草案,可能是 hixie-75hixie-76(因为它们是第一个普遍实施的 websocket 规范)

版本号在 IANA WebSocket 版本号注册表中注册。 https://www.iana.org/assignments/websocket/websocket.xml

【讨论】:

  • 感谢您的回答。所以我需要检查版本,并为较新的版本实现一个,为草稿版本实现一个。我说的对吗?
  • 完全忽略草稿版本。说真的,他们不值得付出努力。很少有浏览器使用它们。升级您的浏览器或 websocket 客户端库,您将获得最终的 RFC-6455 规范。 (又名Sec-WebSocket-Version: 13
  • 欲了解更多信息,请参阅 stackoverflow.com/questions/1253683/…caniuse.com/websockets
猜你喜欢
  • 2016-06-28
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多