你如何检测HttpRequestDecoder遇到错误信息?

时间:2016-01-12 02:42:20

标签: netty

我有一个netty 4.0.33项目,该项目使用HttpServerCodec来解析传入的HTTP消息并写入出站响应。我遇到了一个问题,即如果在网络上发送带有无效HTTP头的消息,HttpObjectDecoder将进入BAD_MESSAGE状态,并忽略该通道上的所有后续消息。

我使用的代码位于https://gist.github.com/adatta02/a312a63e26923c86248a

您可以执行以下操作来测试:

ashish@ashish:~/Downloads/netty-server$ telnet localhost 8000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /index HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

HTTP/1.1 200 OK
Content-Length: 6

/indexGET /index HTTP/1.1
Host: www.example.com
User;Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

HTTP/1.1 200 OK
Content-Length: 6

/indexGET /index HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

^]

telnet> quit
Connection closed.

您会注意到您可以发送一条带有无效标题的邮件(用户代理中有分号),但该邮件会被忽略。

知道如何解决这个问题吗?目前,我正在检查HttpRequest.getDecoderResult()。isSuccess()并关闭通道,如果它失败但看起来应该有更好的方法。

1 个答案:

答案 0 :(得分:1)

你正在做“正确的事”。没有更好的方法。