关于使用OkHttpClient 响应乱码问题
众所周知,在 HTTP 传输时是支持 gzip 压缩的,客户端发起请求时在请求头里增加 Accept-Encoding: gzip,服务端响应时在返回的头信息里增加 Content-Encoding: gzip,这表示传输的数据是采用 gzip 压缩的。默认情况下,传输内容是不压缩的,采用 gzip 压缩后可以大幅减少传输内容大小,这样可以提高传输速度,减少流量的使用。
本来 OkHttp 是默认支持 gzip 解压缩的,不需要额外配置的。
但是如果显式的配置了 Accept-Encoding: gzip,那就又可能出现响应乱码了。
OkHttp内置了许多的拦截器,其中有一个叫BridgeInterceptor,猫腻就在这里
这句代码表示:如果用户没有设置Accept-Encoding 那就会自动在encoding加上gzip值。
而且transparentGzip=true,这个变量后面有用到
当transparentGzip=true且encoding=gzip时候,那它就会自动使用gzip来解压缩数据。否则,它就认为你是要自己处理gzip压缩。所以当我们主动显式加上Accept-Encoding:gzip,它反而不会解压数据。
评论区