当uri中未为请求定义端口时,netty4-http组件将设置无效的“主机” HTTP标头。
netty4-http在DefaultNettyHttpBinding.toNettyRequest中设置标头,其中使用URI解析uri字符串,但如果未定义端口,则URI给出-1。 例如,主机头可以设置为“ hostname:-1”,这在某些检查主机头有效性的代理服务器中是不可接受的。 例如,Apache代理将返回http错误400(错误请求)。
另请参阅第ch。定义为“ 14.23主机” https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html。
请参见https://tools.ietf.org/html/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类,但是很高兴为此找到一个修复程序。