diff --git a/source/core/index.ts b/source/core/index.ts index a8a1561..7404ba5 100644 --- a/source/core/index.ts +++ b/source/core/index.ts @@ -532,6 +532,10 @@ export default class Request extends Duplex implements RequestEvents { } } else { retryAfter *= 1000; + + if (retryAfter <= 0) { + retryAfter = 1; + } } } diff --git a/test/retry.ts b/test/retry.ts index 0e50659..ce62069 100644 --- a/test/retry.ts +++ b/test/retry.ts @@ -304,6 +304,27 @@ test('retries on 503 without Retry-After header', withServer, async (t, server, t.is(retryCount, 1); }); +test('retries immediately on non-positive numeric Retry-After', withServer, async (t, server, got) => { + server.get('/', (_request, response) => { + response.writeHead(503, { + 'Retry-After': 0, + }); + response.end(); + }); + + const start = Date.now(); + const {statusCode, retryCount} = await got({ + throwHttpErrors: false, + retry: { + limit: 2, + }, + }); + + t.is(statusCode, 503); + t.is(retryCount, 2); + t.true(Date.now() - start < 1000); +}); + test('doesn\'t retry on streams', withServer, async (t, server, got) => { server.get('/', () => {});