为什么Volley在401和403上重试?

时间:2016-07-29 06:14:15

标签: android android-volley

因此,Android网络库Volley会在状态代码为401或403时重试请求。请参阅以下BasicNetwork类的代码段。

    ...
    networkResponse = new NetworkResponse(statusCode, responseContents, responseHeaders, false, SystemClock.elapsedRealtime() - requestStart);
    if (statusCode == HttpStatus.SC_UNAUTHORIZED || // which is 401
        statusCode == HttpStatus.SC_FORBIDDEN) {    // which is 403
        attemptRetryOnException("auth", request, new AuthFailureError(networkResponse));
    } else if (statusCode >= 400 && statusCode <= 499) {
        // Don't retry other client errors.
        throw new ClientError(networkResponse);
    } else if {
    ...

但为什么?

首先,我查看了它的提交历史,但没有找到关于这个问题的解释。从第一次提交开始,在401和403上重试,并且从那时起一直没有改变。

此外,我查看了rfc规范,rfc2616规范说,&#34; 请求不应重复&#34;在403, 和&#34; 客户端可以使用合适的授权标头字段重复请求&#34;但是目前的凌空实施只是重试而没有任何更新或修复问题。例如,Google Analytics API documentaion建议客户在没有解决问题的情况下不应重试&#34;在401和403上。

此外,我发现有人咆哮"Volley must not retry on HTTP 401 and 403",但似乎没有进行进一步的讨论。

我错过了什么吗?有人可以就此重试政策分享一些背景知识吗?

0 个答案:

没有答案