Skip to content

Commit 90381be

Browse files
committed
options: parse retry-after header
and set ignoreInvalidCookies by default
1 parent 4f42ba2 commit 90381be

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

lib/options.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@ const logger = {
66

77
const MAX_RETRY = 25;
88
const MAX_RETRY_DELAY = 5000;
9+
const MAX_RETRY_AFTER = 60000;
910
/**
1011
* @type {Partial<DownloaderOptions>}
1112
*/
1213
const defaultOptions = {
1314
req: {
1415
maxRedirects: 15,
16+
// RequestError: Cookie has domain set to a public suffix
17+
// https://developer.mozilla.org/zh-CN/docs/Mozilla/QA/Marionette/Client
18+
ignoreInvalidCookies: true,
1519
retry: {
1620
decompress: true,
1721
limit: MAX_RETRY,
22+
maxRetryAfter: MAX_RETRY_AFTER,
1823
/**
1924
* if you would like to implement it yourself,
2025
* set error.retryLimitExceeded to 1 or true if
@@ -55,6 +60,25 @@ const defaultOptions = {
5560
error.response && error.response.statusCode === 429) {
5661
// add random delay
5762
delay += 3000 + Math.random() * 3000;
63+
if (error.response.headers &&
64+
error.response.headers['retry-after']) {
65+
let retryAfter = parseInt(error.response.headers['retry-after']);
66+
if (Number.isNaN(retryAfter)) {
67+
retryAfter = Date.parse(error.response.headers['retry-after']) - Date.now();
68+
} else {
69+
retryAfter *= 1000;
70+
}
71+
if (!isNaN(retryAfter)) {
72+
retryAfter |= 0;
73+
if (retryOptions.maxRetryAfter) {
74+
if (retryAfter <= retryOptions.maxRetryAfter) {
75+
delay = retryAfter;
76+
}
77+
} else {
78+
delay = retryAfter;
79+
}
80+
}
81+
}
5882
}
5983
delay |= 0;
6084
return delay;

0 commit comments

Comments
 (0)