前言
上一篇文章我们讲到Gzip的问题,我们也找到了问题的原因。我没通过重定义response来获取contentLength。这一篇我们具体讲以下Gzip问题的由来和解决的思想。
排查这个问题的时候很慌,之前没有遇到过,第一次遇到,所以就。。
恢复当时debug的心请,一切准备就绪
我把pdf上传到七牛云之后,试过。loading框跑的好好的。但是一换上公司的文档地址,就各种奇葩事故,大型翻车现场
调试结果显示contentLength=-1。一脸懵逼的我,果断上网搜索。搜索引擎编程。收了白天也没有找到类似的问题。那么我只能根据搜索的一点名词来看了。
1.nginx gzip开启文件压缩
2.okhttp默认支持gzip,如果开发者主动声明gzip,那么解压缩动作将由开发者自己完成
看到这些内容,我算是有一点眉目了
我跟着网上的提示,找到了BridgeInterceptor这个拦截器。(okhttp3.8.1版本)
public final class BridgeInterceptor implements Interceptor {
private final CookieJar cookieJar;
public BridgeInterceptor(CookieJar cookieJar) {
this.cookieJar = cookieJar;
}
@Override public Response intercept(Chain chain) throws IOException {
Request userRequest = chain.request();
Request.Builder requestBuilder = userRequest.newBuilder();
//请求体
RequestBody body = userRequest.body();
if (body != null) {
MediaType contentType = body.contentType();
if (contentType != null) {
requestBuilder.header("Content-Type", contentType.toString());