【问题标题】:Issue with netty websocket headers name in lowercase小写的netty websocket标头名称问题
【发布时间】: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 代码吗?

  1. 在使用现有的 netty websocket 握手类时,是否可以添加/修改 http 响应标头?
  2. 是否应该编写自定义 WebSocketServerProtocolHandler 来实现相同的功能?
  3. 还有其他方法吗?

感谢任何回应!!!

非常感谢。

【问题讨论】:

  • 客户端应该改了,如果没有完全实现HTTP协议,如果没有正确阅读规范,还有什么没有实现

标签: websocket netty


【解决方案1】:

唯一的方法是自己实现它,因为这绝对是客户端的“损坏”行为。您可以做的是将ChannelOutboundHandler 添加到ChannelPipeline,这将为您“修复”标题。

【讨论】:

    【解决方案2】:

    您可以使用 Netty ChannelOutboundHandlerAdapter 在管道中的某处更改标头。在从管道远程处理该处理程序之后,它不会干扰 WebSocket 帧。请在下面找到代码。

    import io.netty.channel.ChannelHandlerContext;
    import io.netty.channel.ChannelOutboundHandlerAdapter;
    import io.netty.channel.ChannelPromise;
    import io.netty.handler.codec.http.HttpResponse;
    
    public class OutboundHeadersChanger extends ChannelOutboundHandlerAdapter {
    
        @Override
        public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
            if (msg instanceof HttpResponse) {
                ((HttpResponse) msg).headers().set("some-header", "some-header-value");
            }
    
            super.write(ctx, msg, promise);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多