我有一个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()并关闭通道,如果它失败但看起来应该有更好的方法。
答案 0 :(得分:1)
你正在做“正确的事”。没有更好的方法。