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());

HTTP PUT私のサーバーにファイルをカールさせてテストすると、ヘッダーが送信さMyHandler.channelReadれたリクエストに対してすぐに呼び出されないことがわかりました(カールはサーバーが応答Expect: 100-continueするのを待っています100 Continue.これは、ハンドラーがHTTP/1.1 100 Continueclient (curl) を使用して、ファイルの実際のアップロードをすぐに開始します。

興味深いことに、この問題をさらにデバッグすると、実際の本文がアップロードされた直後 (最初のバイトが受信された直後) にtelnetaが呼び出されることがわかります。channelRead

PUT「Expect: 100-continue」ヘッダーを使用してリクエストを適切に処理し、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 に答える