首页 > 解决方案 > Camel netty4-http 在请求中设置了无效的主机 http 标头

问题描述

当 uri 中没有为请求定义端口时,netty4-http 组件设置了无效的“主机”HTTP 标头。

netty4-http 在 DefaultNettyHttpBinding.toNettyRequest 中设置标头,其中 URI 用于解析 uri 字符串,但如果未定义端口,则 URI 给出 ​​-1。例如,主机标头可以设置为“主机名:-1”,某些检查主机标头有效性的代理服务器不接受它。例如 Apache 代理将返回一个 http 错误 400(错误请求)。

另见 ch。“14.23 主机” https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html进行定义。

https://www.rfc-editor.org/rfc/rfc7230#section-5.4

// This is how it's done in DefaultNettyHttpBinding.toNettyRequest
URI u = new URI(uri);
String hostHeader = u.getHost() + (u.getPort() == 80 ? "" : ":" + u.getPort());
request.headers().set(HttpHeaderNames.HOST.toString(), hostHeader);
LOG.trace("Host: {}", hostHeader);

作为一种解决方法,我使用了一个自定义的 NettyHttpBinding 类,但很高兴能得到修复。

标签: apache-camel

解决方案


推荐阅读