apache-camel - 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 类,但很高兴能得到修复。
解决方案
推荐阅读
- javascript - 如何更改输入中输入的每个字母
- html - Angular Material Design - 页脚问题 - 双滚动条
- java - 如何将多个 JUnit5 测试类的 ExtentReports 合并到一个 HTML 文件中?
- ios - Cocoapods 到 Swift 包管理器迁移中的“没有这样的模块”错误
- kubernetes - kubernetes 到 openshift 等效命令
- spring-boot - HystrixRuntimeException:超时且没有可用的回退。] 根本原因 java.util.concurrent.TimeoutException: null
- postgresql - 如何重写 Postgres 函数以返回标量值和表值(而不是 refcursor)?
- perl - Perl Search::Elasticsearch 不适用于具有自签名证书的启用 SSL 的节点
- javascript - 做ajax请求作为返回
- r - 将多个 CSV 导入一个数据帧时重复