因此,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",但似乎没有进行进一步的讨论。
我错过了什么吗?有人可以就此重试政策分享一些背景知识吗?