android - java.io.IOException : stream was reset: REFUSED_STREAM on several devices

标签 android https retrofit okhttp http2

我在 Android 应用中使用 Retrofit 1.9。

服务器位于带有 Nginx 的 Django 上,带有 HTTP 2 的 HTTPS。证书来自 WoSign,SSL 实验室得分为“A”。

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

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

在 SGS3 上它工作正常,但在 Nexus 4 和 9 上我遇到了异常:

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)

最佳答案

如果有人仍然遇到问题(2018)。

我已经通过将改造版本更新为

解决了这个问题
 implementation 'com.squareup.retrofit2:retrofit:2.4.0'

关于android - java.io.IOException : stream was reset: REFUSED_STREAM on several devices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40312946/

相关文章:

api - Keycloak API 总是返回 401

Android - 改造 - 基本网址中缺少查询参数

java - 将对象或类链接到 GoogleMap 标记

Android:如何设置编译后的APK名称?

java - 在eclipse tomcat服务器中启用https不允许调用端口8080

html - 如何在 IE9 中使用协议(protocol)相关 URL?

android - RxJava 调用一次性 dispose()

java - 将 POST 请求改造为 Spring Boot 服务

android - 每次打开应用程序时显示 GCM 消息后的 AlertDialog

android - 使 EditText 位于 TextView 下方