OkHttp продолжает получать StreamResetException: поток был сброшен: INTERNAL_ERROR, когда он равен 200

#android #django #okhttp #http2

#Android #django #okhttp #http2

Вопрос:

Я получил StreamResetException: stream was reset: INTERNAL_ERROR от OkHttp. В чем проблема?

Вот журналы.

 I/okhttp.OkHttpClient: <-- 200 https://www.example.com/user/list (396ms)
I/okhttp.OkHttpClient: date: Fri, 04 Dec 2020 02:21:35 GMT
I/okhttp.OkHttpClient: content-type: application/json
I/okhttp.OkHttpClient: content-length: 99730
I/okhttp.OkHttpClient: server: nginx/1.18.0
I/okhttp.OkHttpClient: allow: GET, HEAD, OPTIONS
I/okhttp.OkHttpClient: x-frame-options: DENY
I/okhttp.OkHttpClient: x-content-type-options: nosniff
I/okhttp.OkHttpClient: referrer-policy: same-origin
D/okhttp.Http2: << 0x00000003  5792 DATA          
D/okhttp.Http2: << 0x00000003     4 RST_STREAM    
D/okhttp.TaskRunner: Q10092 canceled              : OkHttp ConnectionPool
D/force: okhttp3.internal.http2.StreamResetException: stream was reset: INTERNAL_ERROR
D/okhttp.Http2: >> 0x00000000     8 GOAWAY     
D/okhttp.TaskRunner: Q10096 finished run in 216 ms: OkHttp www.example.com
 

Это выдается в репозитории Okhttp Gihub. Но какие-либо проблемы еще не решены.

Я вызвал API следующим образом

     @Headers("Content-Type: application/json")
    @GET("/user/list")
    fun getUserList(@Header("Authorization") jwt: String): Call<ArrayList<UserData>>
 

Это 200, но я ничего не получаю. Это очень странное поведение..

Это проблема с сервером или моя проблема? (Сервер — Django).

Ответ №1:

это была проблема с размером буфера Nginx.

Если вы используете AWS EC2,

Перейдите к /etc/nginx/default.d/server.conf

И установить,

 proxy_redirect off;
proxy_buffering off;
 

Ответ №2:

Как указано в OkHttp issue tracker, скорее всего, это ошибка сервера после отправки заголовков.

https://github.com/square/okhttp/issues/3936

Обычно сервер отправляет код ошибки, чтобы указать на проблему на стороне сервера. Это также может произойти, если устройство чтения потоков OkHttp выйдет из строя с неожиданным исключением.

Я бы посоветовал проверить наличие ошибок сервера, если можете, но вы можете увидеть фрейм Http2 с сервера здесь

 D/okhttp.Http2: << 0x00000003     4 RST_STREAM  
 

Ответ №3:

StreamResetException: сервер отправляет код ошибки, чтобы указать на проблему на стороне сервера. Это может быть связано с проблемой размера буфера Nginx, которая также может возникнуть при перегрузке одного сервера несколькими запросами