【问题标题】:How to send a HTTP 100-continue response with netty如何使用 netty 发送 HTTP 100-continue 响应
【发布时间】:2013-10-09 10:51:43
【问题描述】:

我实例化了一个 netty 4(使用 netty-all-4.0.9.jar)服务并通过添加 3 个 ChannelHandler 对象来初始化通道:

pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new MyHandler());

当使用 curl HTTP PUT 将文件发送到我的服务器进行测试时,我发现 MyHandler.channelRead 不会立即调用带有 Expect: 100-continue 标头的请求(curl 正在等待服务器以 100 Continue 回复。这意味着我的处理程序无法回复 HTTP/1.1 100 Continue 响应来告诉客户端(curl)立即启动文件的实际上传。

有趣的是,使用telnet 进一步调试此问题表明,在上传实际正文后(在收到第一个字节之后)立即调用channelRead

关于如何正确处理带有 'Expect: 100-continue' 标头的 PUT 请求以立即触发 100 Continue 响应的任何提示?

【问题讨论】:

    标签: java netty nio http-status-code-100


    【解决方案1】:

    netty 自带的示例(例如 HttpHelloWorldServerHandler.java)在 channelRead() 方法中有如下代码:

    if (is100ContinueExpected(req)) {
         ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE));
    }
    

    【讨论】:

    • 示例中的 helloworld 处理程序工作正常。我进一步调查发现我在通道管道中有一个 HttpContentDecompressor。删除它解决了我的问题。感谢 helloworld 处理程序的提示 - 从这里向后工作指出了根本原因(即使我不确定它为什么会这样 - 您可以通过添加 'p.addLast("deflater", new HttpContentDecompressor()' 到 HttpHelloWorldServerInitializer 类。
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2010-10-25
    • 2020-06-23
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多