我之前看过有关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服务发送请求时,不会发生此问题。
如果有人解决了这个问题,我想知道怎么做。谢谢。
答案 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标头。
修复标题修复此问题。打印您正在进行的确切请求,并确保所有标头格式正确。