0%

feign使用okHttp压缩

在Feign开启压缩的时候,会在请求的时候往Header中新增Accept-Encoding:gzip,deflate属性导致解析服务器返回的数据乱码

在老版本的Spring Cloud 1.0.3(Spring Cloud Netlfix 1.0.1) 的时候会出现这个问题

那个时候的原因是由于注入的类型的问题,在升级到1.1后这个问题就被解决了。

然后现在出现了同样的问题,在查阅大量资料之后发现,okHttp会默认搞一个Accept-Encoding:gzip的请求头往下游去请求,
如果手工指定了gzip的请求头则okhttp不会对响应数据进行一个解压缩处理,但是任然会对返回进行okHttp默认的处理,所以就会导致一个乱码

BridgeInterceptor.java

1
2
3
4
5
6
7
8

// If we add an "Accept-Encoding: gzip" header field we're responsible for also decompressing
// the transfer stream.
boolean transparentGzip = false;
if (userRequest.header("Accept-Encoding") == null && userRequest.header("Range") == null) {
transparentGzip = true;
requestBuilder.header("Accept-Encoding", "gzip");
}

okHttp会自己添加gzip的请求头,然后会自己处理一个解析。

处理方案直接加一个feign的拦截器,删掉请求头中的Accept-Encoding