1

我实例化了一个 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/ curlHTTP PUT将文件发送到我的服务器时,我发现MyHandler.channelRead没有立即调用带有标头的请求Expect: 100-continue(curl 正在等待服务器回复100 Continue. 这意味着我的处理程序无法回复HTTP/1.1 100 Continue以告诉客户端(curl)立即启动文件的实际上传。

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

关于如何正确处理PUT带有“期望:100-继续”标头的请求以100 Continue立即触发响应的任何提示?

4

1 回答 1

1

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

if (is100ContinueExpected(req)) {
     ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE));
}
于 2013-10-03T08:37:28.873 回答