Jetty-9警告:错误消息:400非法字符
我正在使用jetty-9.2.2和CometD-3.0.1。我在设置中看到以下警告。一天大约4,5次Jetty-9警告:错误消息:400非法字符,jetty,jetty-9,Jetty,Jetty 9,我正在使用jetty-9.2.2和CometD-3.0.1。我在设置中看到以下警告。一天大约4,5次 2014-08-28 08:50:53.712:WARN:oejh.HttpParser:qtp607635164-15194: badMessage: 400 Illegal character for HttpChannelOverHttp@5946f125{r=1,a=IDLE,uri=-} 没有可从警告消息中调试的详细信息。我已经记录了提供详细警告的请求 同时我想知道是什
2014-08-28 08:50:53.712:WARN:oejh.HttpParser:qtp607635164-15194: badMessage:
400 Illegal character for HttpChannelOverHttp@5946f125{r=1,a=IDLE,uri=-}
没有可从警告消息中调试的详细信息。我已经记录了提供详细警告的请求
同时我想知道是什么导致了这个警告?我是否可以忽略此消息,或者某些消息因此丢失 2017年5月更新 对于Jetty 9.3+用户,您可能会看到一条日志消息,使此响应代码更加清晰 有关详细信息,请参阅 原始答案 解析错误的HTTP请求时,可能会出现
错误消息:400个非法字符
这就是客户端看到的HTTP错误响应
它可能发生的某些(并非所有)情况
- 下线不是“\r\n”(CR+LF)(HTTP规范要求)
- HTTP方法令牌未被识别,或者其后面有无效的空格
- HTTP版本无法识别或具有无效字符
- HTTP头名称不符合规范
- HTTP标头值不符合规范
此消息在公共(面向internet)服务器上很常见
您收到了错误的HTTP请求。为什么?
- 合法HTTP客户端有一个bug
- 合法HTTP客户端未遵循HTTP规范
- 非HTTP客户端尝试连接到您的服务器(例如尝试在SSL/TLS/HTTPS端口上使用非加密HTTP,甚至尝试与您的HTTP端口对话的SMTP/IMAP电子邮件客户端这样奇怪的东西)
- 恶意客户端正试图探测您的系统的弱点
Jetty对包含用户发送数据的详细错误消息持谨慎态度,因为这些消息可能是攻击的一部分,即使只是发送到终端
不过,我们可以做得更好,并记录一些经过消毒的数据。根据bugzilla将url中的https
更改为http
我也犯了同样的错误,然后发现这是因为我的应用程序不支持https,所以jetty无法识别https加密请求。这个错误可能是由一个愚蠢的小错误引起的,就像对我一样
在我的localhost Jetty实例上进行测试时,我收到了一条非常类似的400个非法字符的消息。然后我意识到了原因。我只是假设我在当地码头的申请地址是:
https://localhost:8080
鉴于正确的地址不安全:
http://localhost:8080
之后就没问题了 我遇到了这个问题,因为我把“http://”误认为是“https://”谢谢,但我在旧的jettyv7.6中没有看到任何错误。这些错误是在将jetty服务器更新到9.2.2之后出现的。那么,请求中是否有以前允许但现在不允许的特定字符?它与Jetty 7和Jetty 9无关,Jetty 7中也存在这种级别的HTTP错误/警告。事实上,Jetty 9在解析方面更为宽松(这是使用更新的HTTP RFC、WebSocket和HTTP/2的结果)我可以忽略这个警告吗?在我的用例中,我在jetty中部署cometd。正如与Comet供应商讨论的那样,他们表示要忽略此警告:感谢您对新线(CRLF)的评论。在Windows上的文件上使用unix2dos修复了这个问题:)Oops--对不起--我看到S.Du已经在上面给出了我的答案。我的这个答案也许应该删除。我花了12个多小时试图找出问题所在。这很有效。非常感谢。