您如何检测 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"。没有更好的办法。
我有一个 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"。没有更好的办法。