您如何检测 HttpRequestDecoder 遇到错误消息?

How do you detect HttpRequestDecoder encountering a bad message?

我有一个 netty 4.0.33 项目,它使用 HttpServerCodec 来解析传入的 HTTP 消息并编写出站响应。我 运行 遇到一个问题,如果通过网络发送带有无效 HTTP headers 的消息,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.

您会注意到,您可以发送一条带有无效 headers 的消息(User-Agent 中有一个分号),但随后的消息会在频道上被忽略。

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

您正在执行 "right thing"。没有更好的办法。