# 429请求过多：Retry-After头值格式错误或缺失

- **ID:** `api/rate-limit-exceeded-retry-after-malformed`
- **领域:** api
- **类别:** resource_error
- **验证级别:** ai_generated
- **修复率:** 70%

## 根因

服务器返回429，但Retry-After头格式无效（例如非数字、负数或完全缺失），导致客户端无法实现正确的退避。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Nginx 1.24.0 | active | — | — |
| Cloudflare 2024 | active | — | — |
| AWS API Gateway 2024 | active | — | — |
| Kong 3.5.0 | active | — | — |

## 解决方案

1. ```
   实现健壮的Retry-After解析，处理秒数和HTTP日期格式：`const retryAfter = response.headers.get('Retry-After'); let delay; if (retryAfter && /^\d+$/.test(retryAfter)) { delay = parseInt(retryAfter) * 1000; } else if (retryAfter) { delay = new Date(retryAfter).getTime() - Date.now(); } else { delay = 5000; }`
   ```
2. ```
   当Retry-After缺失时，使用带抖动的指数退避作为回退：`delay = Math.min(60000, Math.pow(2, attempt) * 1000 + Math.random() * 1000)`
   ```
3. ```
   联系API提供商修复Retry-After头格式，同时宽松解析（例如提取第一个数值）
   ```

## 无效尝试

- **** — Hardcoding a fixed retry delay (e.g., 5 seconds) instead of parsing Retry-After (80% 失败率)
- **** — Ignoring Retry-After and retrying immediately, causing repeated 429 responses (90% 失败率)
- **** — Assuming Retry-After is always in seconds (when it could be an HTTP-date) (65% 失败率)
