Jetty-9警告:badMessage:400 非法字符

31

我正在使用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=-}  

警告信息中没有可调试的详细信息。我已经提交了一个请求https://bugs.eclipse.org/bugs/show_bug.cgi?id=443049,以提供详细的警告信息。

与此同时,我想知道是什么导致了这个警告?我可以忽略它吗?还是因为这个警告消息有些信息丢失了?

5个回答

55

将URL中的https修改为http

我遇到了相同的错误,后来发现是因为我的应用程序不支持https,因此Jetty无法识别https加密请求。


我花了超过12个小时来找出问题所在。这个方法有效。谢谢! - Meg

14

2017年5月更新

对于Jetty 9.3及以上版本的用户,您可能会看到一条日志消息,使得这个响应代码更加清晰。

详情请参见升级到Jetty 9.3后的头部解析错误

原始答案

Bad Message: 400 Illegal Character 可能会在解析错误的HTTP请求时发生。

客户端会看到这个HTTP错误响应。

它可能发生在以下某些情况中(但不是全部):

  • EOL不是“\r\n”(CR + LF)(HTTP规范要求)
  • HTTP方法标记未被识别或其后的空格无效
  • HTTP版本未被识别或包含无效字符
  • HTTP头名称不遵循规范
  • HTTP头值不遵循规范

此消息在公共(面向互联网)服务器上很常见。

为什么会有错误的HTTP请求进入您的服务器?

  • 合法的HTTP客户端存在漏洞
  • 合法的HTTP客户端没有遵循HTTP规范
  • 非HTTP客户端尝试连接到您的服务器(例如在SSL / TLS / HTTPS端口上尝试使用非加密HTTP,甚至像SMTP / IMAP邮件客户端这样奇怪的东西尝试连接到您的HTTP端口)
  • 恶意客户端试图探测您系统的弱点

谢谢,但我在旧的jettyv7.6中没有看到任何错误。这些错误是在将我的jetty服务器更新到9.2.2之后开始出现的。那么,请求中是否有任何特定字符以前是允许的,但现在不允许了? - Anuj Khandelwal
这与Jetty 7和Jetty 9无关,这种级别的HTTP错误/警告在Jetty 7中也存在。 - Joakim Erdfelt
事实上,Jetty 9在解析方面更加宽容(这是由于与更新的HTTP RFC、WebSocket和HTTP/2一起进行的工作的结果)。 - Joakim Erdfelt
我可以忽略这个警告吗?在我的使用情况中,我正在jetty中部署cometd。如与CometD供应商讨论的那样,他们建议忽略此警告:https://groups.google.com/forum/#!topic/cometd-users/V5Dn9np1zz0 - Anuj Khandelwal
感谢对换行符(CRLF)的评论。在Windows上使用unix2dos修复了这个问题 :) - oligofren

11
这个错误可能是由一个愚蠢的小错误引起的,就像我一样。在我的本地Jetty实例上进行测试时,我收到了一个非常类似的400非法字符消息。然后我意识到原因所在。我只是假设了本地Jetty应用程序地址为:https://localhost:8080,而正确的地址是未加密的:http://localhost:8080。之后没有问题。

抱歉,我看到S. Du已经给出了与我的答案相同的回答。也许应该删除我的这个回答。 - Ben Weaver

5

Jetty非常谨慎地处理包含用户发送数据的详细错误消息,因为即使将其回显到终端,这些数据也可能是攻击的一部分。

然而,我们可以更好地记录一些经过消毒的数据。在bugzilla上采取行动。


0

嗯,我遇到了这个问题,因为我把"http://"误认为是"https://"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接