java.io.IOException:流已重置:在多个设备上为REFUSED_STREAM [英] java.io.IOException: stream was reset: REFUSED_STREAM on several devices

查看:577
本文介绍了java.io.IOException:流已重置:在多个设备上为REFUSED_STREAM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Android应用中使用Retrofit 1.9.

I'm using Retrofit 1.9 in my Android app.

服务器在Django上使用Nginx,在HTTPS上使用HTTP2.证书来自WoSign,SSL Labs上的得分为"A".

Server is on Django with Nginx, HTTPS with HTTP 2. Certificate is from WoSign, "A" score on SSL Labs.

我正在3种设备上进行测试:

I'm testing on 3 devices:

  • Nexus 4,Android 5.1.1(正式版)
  • Nexus 9,Android 7.0(官方)
  • 三星Galaxy S3,Android 4.4(官方)

在SGS3上可以正常运行,但在Nexus 4和amp; 9我遇到了例外:

On SGS3 it works fine, but on Nexus 4 & 9 I'm getting the exception:

java.io.IOException: stream was reset: REFUSED_STREAM
                                                               at com.squareup.okhttp.internal.framed.FramedStream.getResponseHeaders(FramedStream.java:146)
                                                               at com.squareup.okhttp.internal.http.Http2xStream.readResponseHeaders(Http2xStream.java:150)
                                                               at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
                                                               at com.squareup.okhttp.internal.http.HttpEngine.access$200(HttpEngine.java:87)
                                                               at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:722)
                                                               at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:576)
                                                               at com.squareup.okhttp.Call.getResponse(Call.java:287)
                                                               at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:243)
                                                               at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:205)
                                                               at com.squareup.okhttp.Call.execute(Call.java:80)
                                                               at retrofit.client.OkClient.execute(OkClient.java:53)
                                                               at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326)
                                                               at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
                                                               at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
                                                               at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                               at retrofit.Platform$Android$2$1.run(Platform.java:142)
                                                               at java.lang.Thread.run(Thread.java:761)

推荐答案

我已经解决了这个问题.这是Nginx的错误

I've solved this. It's a Nginx bug

此问题已在Nginx 1.11中修复.因此,解决方案只是更新到NGINX 1.11(当前为主线).

This issue was fixed in Nginx 1.11. So, the solution is just to update to NGINX 1.11 (mainline currently).

这篇关于java.io.IOException:流已重置:在多个设备上为REFUSED_STREAM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆