2013-10-02 1 views
1

Я инстанцирован на 4 услуги (с помощью Netty-все-4.0.9.jar) Нетти и инициализации канала путем добавления 3 ChannelHandler объектов:Как отправить HTTP 100-продолжать реакцию с Нетти

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 запросами с заголовком «Ожидать: 100-продолжить» правильно, чтобы вызвать 100 Continue ответ немедленно?

ответ

1

Примеры приходящие с Netty (например HttpHelloWorldServerHandler.java) имеют следующий код в методе channelRead():

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

Я появляется обработчик HelloWorld в примере работает нормально. Я исследовал дальше и обнаружил, что у меня был HttpContentDecompressor в конвейере канала. Удаление его решило мою проблему. Спасибо за подсказку с обработчиком helloworld - работа назад назад указала мне первопричину (хотя я не уверен, почему она ведет себя так: вы можете легко воспроизвести поведение thgis, добавив «p.addLast (« deflater », new HttpContentDecompressor() 'в класс HttpHelloWorldServerInitializer. – phrinx

Смежные вопросы