OkHttp在返回200状态码时持续收到"StreamResetException: stream was reset: INTERNAL_ERROR"异常。

10
我从OkHttp收到了一个“StreamResetException: stream was reset: INTERNAL_ERROR”的错误。这是什么问题?
以下是日志。
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 Github仓库发布的信息。但是目前还没有解决任何问题。
我像这样调用API:
    @Headers("Content-Type: application/json")
    @GET("/user/list")
    fun getUserList(@Header("Authorization") jwt: String): Call<ArrayList<UserData>>

我输入了200但是没有得到任何结果,这个行为非常奇怪。

这是服务器的问题还是我的问题?(服务器使用Django)。

3个回答

5

这是个Nginx缓冲区大小的问题。

如果你在使用AWS EC2,

前往/etc/nginx/default.d/server.conf

然后设置:

proxy_redirect off;
proxy_buffering off;

3

StreamResetException:服务器发送错误代码以指示服务器端问题。这可能是由于Nginx缓冲区大小问题引起的,也可能是由于向单个服务器超载多个请求而发生。


3
根据OkHttp问题跟踪器的建议,很可能这是在头部发送后发生的服务器错误。

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

通常情况下,错误代码是服务器发送的指示问题发生在服务器端的信息。如果 OkHttp 的流阅读器意外崩溃,也可能会出现这种情况。我建议如果可以的话检查服务器错误,但您可以在此处查看来自服务器的 Http2 帧。
D/okhttp.Http2: << 0x00000003     4 RST_STREAM  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接