gpt4 book ai didi

apache-camel - Camel HTTP4 删除了 bridgeEndpoint=true 上的内容编码 header

转载 作者:行者123 更新时间:2023-12-02 03:12:07 25 4
gpt4 key购买 nike

像这样的路线

<route id="proxy">
<from uri="jetty:http://0.0.0.0:9092/Domain?matchOnUriPrefix=true"/>
<to uri="http4://localhost:8080/Domain?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/>
</route>

如果本地主机的响应是 GZIP 编码的,则代理的响应不是 GZIP 编码的。

本地主机的响应:8080

HTTP/1.1 202 Accepted
Server: Apache-Coyote/1.1
Content-Encoding: gzip
Date: Sat, 10 Sep 2016 15:39:31 GMT
Vary: Accept-Encoding
Content-Type: multipart/mixed
Transfer-Encoding: chunked

本地主机的响应:9092

HTTP/1.1 202 Accepted
Content-Type: multipart/mixed
Server: Apache-Coyote/1.1
Vary: Accept-Encoding
Transfer-Encoding: chunked

即使 bridgeEndpoint 设置为 true,HTTP4 组件似乎解压缩 GZIP 流并删除 Content-Encoding header ?

当我在 to uri 中执行相同的代理时

<to uri="http://localhost:8080/ReferenceDomain.svc?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/>

<to uri="jetty:http://localhost:8080/ReferenceDomain.svc?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/>

它按预期工作。

我错过了什么/做错了什么?

(我使用的是 Camel 2.15.1)

最佳答案

现在回答可能为时已晚,但我最近偶然发现了同样的问题,例如通过 Camel 代理请求时,Content-Encoding header 被删除。最初我认为 Camel HTTP 组件有问题,但它显然是 Apache HTTP 客户端。

例如如果您在 Camel 中保留 Apache HTTP Client 构建器的默认配置,它会返回拦截器,该拦截器会自动解码 gzip 压缩的内容并从响应中清除 Content-Encoding header ,因此 Camel 甚至没有机会读取 header 。检查 HttpClientBuilder 的 contentCompressionDisabled 属性。

因此,我的解决方案是覆盖默认的 HttpClientBuilder 以禁用内容压缩,例如

public class CustomHttp4Component extends HttpComponent {
@Override
protected HttpClientBuilder createHttpClientBuilder(final String uri, final Map<String, Object> parameters,
final Map<String, Object> httpClientOptions) throws Exception {
HttpClientBuilder builder = super.createHttpClientBuilder(uri, parameters, httpClientOptions);
// If not set, http client will decompress the entity and remove content-encoding headers from response.
// There is logic in Camel to decompress if header is set hence we leave decompression logic to Camel and disable decomp in Apache HTTP client.
builder.disableContentCompression();
return builder;
}

关于apache-camel - Camel HTTP4 删除了 bridgeEndpoint=true 上的内容编码 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com