正常应用突发Retrofit协议异常,仅生产HTTPS端点调用失败
搞定Retrofit的
java.net.ProtocolException: Expected ':status' header not present异常 遇到的问题
之前一直运行稳定的应用,从昨天开始突然出问题——所有打向生产环境HTTPS端点的请求全失败,抛出java.net.ProtocolException: Expected ':status' header not present错误。奇怪的是,普通HTTP请求、其他非生产环境的HTTPS端点都能正常执行,唯独生产环境这个HTTPS地址不行。
问题根因分析
这个错误大概率是HTTP/2协议兼容性问题搞的鬼。OkHttpClient默认会优先尝试用HTTP/2和服务器通信,但有些生产环境的服务器可能在HTTP/2的响应头配置上有特殊设置,导致客户端没法正确识别HTTP/2要求的:status头字段,直接触发了这个异常。
亲测有效的解决方案
强制让OkHttpClient只使用HTTP/1.1协议,绕开HTTP/2的兼容坑就行,代码很简单:
OkHttpClient client = new OkHttpClient(); client.setProtocols(Arrays.asList(Protocol.HTTP_1_1));
我这么配置之后,生产环境的HTTPS请求立刻就恢复正常了。
内容的提问来源于stack exchange,提问作者Bajrang Hudda
相关产品推荐
相关产品推荐

