服务器在 WebSocket 握手请求后给出 http 400 错误
Server giving http 400 error after WebSocket handshake request
我正尝试在 C 中实现开源 CometD 库,以便能够 运行 几乎任何给定设备上的 CometD 客户端。
与服务器握手和通信的 Long_Polling 技术已经完成,所以从逻辑上讲,我必须为用户提供 WebSocket 选项。
所以我获取了 Inter Web 并遇到了 NoPoll 库来帮助我解决 WebSocket 部分。
感谢 NoPoll 现在我可以连接到服务器并敲他的门,但是当我尝试与其握手时,我总是得到这个 400 错误:
这是我的握手:
GET ws://m.zpush.ovh:8080/str/strd HTTP/1.1
Host: m.zpush.ovh:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Extension: permessage-deflate;client_max_window_bits
Sec-WebSocket-Key: Z0WLawAAAADGI3syAAAAAA==
Origin: null
Cookie: BAYEUX_BROWSER=56a9-mchhnynonz6ji8a6hs1sh49; JSESSIONID=8gz8e00htqrl15vcm3o9yi95f
Sec-WebSocket-Version: 13
这是 Jetty 错误:
WARN:oejh.HttpParser:qtp1213415012-14: badMessage: 400 for HttpChannelOverHttp@40ec53c2{r=0,c=false,a=IDLE,uri=-}
所以我再次获取了网络,但我没有找到任何线索。
据我所知,码头通常会给出更准确的错误信息,但你会同意这个非常模糊。
它没有告诉我为什么以及我应该解决什么问题才能实现握手。但我怀疑我在 HandShake 格式中遗漏了一些东西。
我不明白的另一件事是它说 "HttpParser" 但我正在寻找 WebSocket 握手。
任何对此的了解都将不胜感激,并且一如既往,当我得到答案时,我会使用给定的答案正确制作一个小教程来帮助其他开发人员并为他们提供一些代码。
PS : 如果需要,我可以将我的代码上传到 GitHub 没问题。
感谢您的宝贵时间。
很可能您的服务器配置错误,不支持 WebSocket。
我建议你像解释的那样启动 CometD 演示服务器 here,然后尝试你的 C 客户端。
我刚刚尝试了您的升级请求(只是替换了主机名和端口),它工作正常。
我正尝试在 C 中实现开源 CometD 库,以便能够 运行 几乎任何给定设备上的 CometD 客户端。
与服务器握手和通信的 Long_Polling 技术已经完成,所以从逻辑上讲,我必须为用户提供 WebSocket 选项。
所以我获取了 Inter Web 并遇到了 NoPoll 库来帮助我解决 WebSocket 部分。
感谢 NoPoll 现在我可以连接到服务器并敲他的门,但是当我尝试与其握手时,我总是得到这个 400 错误:
这是我的握手:
GET ws://m.zpush.ovh:8080/str/strd HTTP/1.1
Host: m.zpush.ovh:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Extension: permessage-deflate;client_max_window_bits
Sec-WebSocket-Key: Z0WLawAAAADGI3syAAAAAA==
Origin: null
Cookie: BAYEUX_BROWSER=56a9-mchhnynonz6ji8a6hs1sh49; JSESSIONID=8gz8e00htqrl15vcm3o9yi95f
Sec-WebSocket-Version: 13
这是 Jetty 错误:
WARN:oejh.HttpParser:qtp1213415012-14: badMessage: 400 for HttpChannelOverHttp@40ec53c2{r=0,c=false,a=IDLE,uri=-}
所以我再次获取了网络,但我没有找到任何线索。 据我所知,码头通常会给出更准确的错误信息,但你会同意这个非常模糊。
它没有告诉我为什么以及我应该解决什么问题才能实现握手。但我怀疑我在 HandShake 格式中遗漏了一些东西。
我不明白的另一件事是它说 "HttpParser" 但我正在寻找 WebSocket 握手。
任何对此的了解都将不胜感激,并且一如既往,当我得到答案时,我会使用给定的答案正确制作一个小教程来帮助其他开发人员并为他们提供一些代码。
PS : 如果需要,我可以将我的代码上传到 GitHub 没问题。
感谢您的宝贵时间。
很可能您的服务器配置错误,不支持 WebSocket。
我建议你像解释的那样启动 CometD 演示服务器 here,然后尝试你的 C 客户端。
我刚刚尝试了您的升级请求(只是替换了主机名和端口),它工作正常。