服务器在WebSocket握手请求后出现http 400错误

时间:2015-05-27 13:50:18

标签: c websocket jetty http-status-code-400 cometd

我正试图在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 Handshake。

对此的任何启发都会非常感激,并且当我得到答案时,我会使用给定的答案正确地制作一个小教程,以帮助其他开发人员并给他们一些代码来支持。

PS:如果需要,我可以在GitHub上传我的代码没问题。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

很可能您的服务器配置错误,不支持WebSocket。

我建议你像解释here一样启动CometD演示服务器,并尝试使用你的C客户端。

我刚试过你的升级请求(只是替换了主机名和端口),它运行得很好。