【发布时间】:2018-05-22 22:21:21
【问题描述】:
我正在使用 netty 来实现 websocket 服务器。服务器需要使用一些旧的 websocket 客户端库(用其他语言编写),这些库不遵守 HTTP 标头不区分大小写规则。我在那里遇到了问题。
我的入站通道管道非常标准,如下所示 HttpServerCodec -> HttpObjectAggregator -> HttpRequestBuilder ->WebSocketServerProtocolHandler -> WebSocketFrameAggregator -> CustomHandler
在 netty 版本 4.1.23.Final 我看到发送给客户端的 websocket 握手响应都是小写的标题名称,如下所示。
upgrade: websocket\r\n
connection: upgrade\r\n
sec-websocket-accept: hex-values=\r\n
但较旧的 websocket 客户端需要以下格式的标头。
Upgrade: websocket\r\n
Connection: Upgrade\r\n
Sec-WebSocket-Accept: hex-values=\r\n
因此,websocket 连接没有完成。 有人遇到过这个问题吗?
标头字符串来自 HttpHeaderNames 类而不是 HttpHeader 类。修复方法是更改 WebSocketServerHandshaker13.newHandshakeResponse() 以使用所需的 HttpHeader。但这可能需要更改 netty 代码本身。 有人可以建议任何更简洁的方法来解决这个问题而不更改 netty 代码吗?
- 在使用现有的 netty websocket 握手类时,是否可以添加/修改 http 响应标头?
- 是否应该编写自定义 WebSocketServerProtocolHandler 来实现相同的功能?
- 还有其他方法吗?
感谢任何回应!!!
非常感谢。
【问题讨论】:
-
客户端应该改了,如果没有完全实现HTTP协议,如果没有正确阅读规范,还有什么没有实现