jetty BadMessage:400没有HttpChannelOverHttp的主机

时间:2014-11-12 23:33:03

标签: http jetty apache-camel dropwizard

我之前看过有关Jetty BadMessage的帖子:400没有HttpChannelOverHttp的主机,我可以确认我能够重复这个问题。

我在Camel Blueprint中有一条Jetty路由,它创建了另一个请求,并通过Camel HTTP转发到Dropwizard服务。

.process(new Processor() {
//Creates Object for request
}

.marshal(jsonFormat)
.convertBodyTo(String.class)
.setHeader(Exchange.HTTP_URI, simple(serviceEndpoint))
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethod.POST))
.to(userviceEndpoint)

执行此请求时,我在Dropwizard上看到以下错误

WARN  [2014-11-12 23:15:35,333] org.eclipse.jetty.http.HttpParser: BadMessage: 400 No Host for HttpChannelOverHttp@3aa99dd2{r=0,a=IDLE,uri=-}

这种情况经常发生,当我使用SOAP-UI(使用serviceEndpoint URL)向DW服务发送请求时,不会发生此问题。

如果有人解决了这个问题,我想知道怎么做。谢谢。

3 个答案:

答案 0 :(得分:2)

捕获您的网络流量,并发送您要发送给Jetty的HTTP请求标头。

可能的情况是您的HTTP客户端没有发送Host:标头(在HTTP / 1.1上需要)

答案 1 :(得分:0)

就我而言,我正在设置标题为null的值。从请求中删除具有null值的标头后解决了问题。

码头版本:9.3.8

答案 2 :(得分:0)

当我使用格式不正确的标头发出请求时出现此错误。因此,不是将标题设置为“X_S_ID:ABC”,而是“X_S_ID:[”X_S_ID“:BLAH]”。因此,错误有时可能并不意味着您需要传递Host标头。

修复标题修复此问题。打印您正在进行的确切请求,并确保所有标头格式正确。