如何使用netty发送HTTP 100-continue响应

时间:2013-10-02 21:42:25

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

我实例化了一个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());

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

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

有关如何处理PUT请求的任何提示,请使用'Expect:100-continue'标头正确触发100 Continue响应?

1 个答案:

答案 0 :(得分:1)

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

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