30

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

同时我想知道是什么导致了这个警告?我可以忽略这个还是因为这个而丢失了一些消息?

4

5 回答 5

54

在网址中更改https为。http

我有同样的错误,然后发现是因为我的应用程序不支持 https,所以码头无法识别 https 加密请求。

于 2016-03-30T21:21:51.617 回答
13

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 标头值不符合规范

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

您收到了错误的 HTTP 请求。为什么?

  • 一个合法的 HTTP 客户端有一个 bug
  • 合法的 HTTP 客户端未遵循 HTTP 规范
  • 非 HTTP 客户端尝试连接到您的服务器(例如尝试在 SSL/TLS/HTTPS 端口上使用未加密的 HTTP,甚至像 SMTP/IMAP 电子邮件客户端尝试与您的 HTTP 端口通信一样奇怪)
  • 恶意客户端正试图探测您的系统的弱点
于 2014-09-02T14:32:00.080 回答
11

对我来说,这个错误可能是由一个愚蠢的小错误引起的。

在我的 localhost Jetty 实例上进行测试时,我收到了一条非常相似的 400 Illegal Character 消息。然后我明白了为什么。我只是假设我本地 Jetty 上的申请地址是:

https://localhost:8080

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

http://localhost:8080

之后就没有问题了。

于 2018-02-06T10:24:23.053 回答
5

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

但是,我们可以做得更好并记录一些经过清理的数据。作用于 bugzilla

于 2014-09-03T22:37:23.843 回答
0

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

于 2019-02-28T11:47:32.850 回答