2016-10-28 12 views
0

Я использую Retrofit 1.9 в своем приложении для Android.java.io.IOException: поток был сброшен: REFUSED_STREAM на нескольких устройствах

Сервер находится на Django с Nginx, HTTPS с HTTP 2. Сертификат от WoSign, оценка «A» в SSL Labs.

Я тестирую на 3 устройства:

  • Nexus 4, Android 5.1.1 (официальных)
  • Nexus 9, Android 7,0 (официальный)
  • Samsung 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) 

ответ

0

Я решил это. Это Nginx bug

Эта проблема была исправлена ​​в Nginx 1.11. Итак, решение просто для обновления до NGINX 1.11 (mainline в настоящее время).

0

В моем случае nginx был обновлен до 1.11.x. Виновником для меня был okhttp и дооснащение. Когда я попытался сделать запрос PUT, он потерпит неудачу с stream was reset: REFUSED_STREAM.

Чтобы исправить это, я модернизировал до последних версий обоих, что в то время я пишу это, являются:

compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.okhttp3:okhttp:3.5.0' 

Если вы используете модифицированную 2.0.x или 3.1.x okhttp, обновление должно решить проблему.