Jetty-9警告:badMessage:400非法角色

问题描述 投票:25回答:5

我使用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以提供详细的警告。

同时我想知道造成这种警告的原因是什么?我可以忽略这个或因为这个而丢失了一些消息吗?

jetty jetty-9
5个回答
47
投票

我有同样的错误,然后发现它是由我在网址中使用https而不是http引起的。 (我的应用程序当时只支持http。)将https更改为http后,它就解决了。


10
投票

2017年5月更新

对于Jetty 9.3+用户,您可能会看到一条日志消息,使得此响应代码更加清晰。

有关详细信息,请参阅Header parse error after upgrade to Jetty 9.3

原始答案

在解析错误的HTTP请求期间可能会出现Bad Message: 400 Illegal Character

这是客户端看到的HTTP错误响应。

可能发生的一些(并非所有)情况。

  • EOL不是“\ r \ n”(CR + LF)(HTTP规范要求)
  • HTTP方法令牌无法识别或后面有无效的空格
  • HTTP版本无法识别或具有无效字符
  • HTTP标头名称不符合规范
  • HTTP标头值不符合规范

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

你有不好的HTTP请求。为什么?

  • 合法的HTTP客户端有一个错误
  • 合法的HTTP客户端不遵循HTTP规范
  • 非HTTP客户端尝试连接到您的服务器(例如尝试在SSL / TLS / HTTPS端口上使用非加密HTTP,甚至尝试与尝试与HTTP端口通信的SMTP / IMAP电子邮件客户端一样奇怪)
  • 恶意客户端正试图探测系统的漏洞

8
投票

对于我来说,这个错误可能是由于一个愚蠢的小错误造成的。

在我的localhost Jetty实例上进行测试时,我收到了一条非常类似的400非法字符消息。然后我意识到了原因。我简单地假设我当地Jetty的申请地址是:

https://localhost:8080

而正确的地址是不安全的:

http://localhost:8080

之后没问题。


5
投票

Jetty对包含用户发送数据的详细错误消息持谨慎态度,因为这些消息可能是攻击的一部分 - 即使只是回应终端。

但是,我们可以做得更好并记录一些消毒数据。代理bugzilla


0
投票

好吧,我遇到了这个问题,因为我把“http://”误认为是“https://”

© www.soinside.com 2019 - 2024. All rights reserved.