From 7a0c423357818b19eb431775452b1357bc7fd3eb Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 31 Jul 2025 09:17:42 +0200 Subject: Implement support for HTTP 429 Too Many Requests (#7760) * Implement support for HTTP 429 Too Many Requests Will obey the corresponding HTTP `Retry-After` header at domain level. * Implement 503 Service Unavailable * Sanitize Retry-After * Reduce default value when Retry-After is absent And make configuration parameter * Retry-After also for favicons --- app/Utils/httpUtil.php | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 app/Utils/httpUtil.php (limited to 'app/Utils/httpUtil.php') diff --git a/app/Utils/httpUtil.php b/app/Utils/httpUtil.php new file mode 100644 index 000000000..12ebc3d07 --- /dev/null +++ b/app/Utils/httpUtil.php @@ -0,0 +1,74 @@ +limits; + if (ctype_digit($retryAfter)) { + $retryAfter = time() + (int)$retryAfter; + } else { + $retryAfter = \SimplePie\Misc::parse_date($retryAfter) ?: + (time() + max(600, $limits['retry_after_default'] ?? 0)); + } + $retryAfter = min($retryAfter, time() + max(3600, $limits['retry_after_max'] ?? 0)); + + @mkdir(self::RETRY_AFTER_PATH); + if (!touch(self::RETRY_AFTER_PATH . $domain . '.txt', $retryAfter)) { + Minz_Log::error('Failed to set Retry-After for ' . $domain); + return 0; + } + return $retryAfter; + } +} -- cgit v1.2.3