Jetty-9警告:错误消息:400非法字符

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=-} 没有可从警告消息中调试的详细信息。我已经记录了提供详细警告的请求 同时我想知道是什

我正在使用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=-}  
没有可从警告消息中调试的详细信息。我已经记录了提供详细警告的请求


同时我想知道是什么导致了这个警告?我是否可以忽略此消息,或者某些消息因此丢失

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个多小时试图找出问题所在。这很有效。非常感谢。