의미
클라이언트가 정해진 시간에 너무 많은 요청을 보냈습니다(속도 제한). Retry-After가 기다릴 시간을 알려줄 수 있습니다.
흔한 원인
- API 속도 제한이나 할당량 초과
- 백오프 없는 재시도 루프
- 많은 사용자가 하나의 공유 IP 뒤에 있음
해결 방법
클라이언트 또는 방문자라면
Retry-After를 지키고, 지터가 있는 지수 백오프를 쓰며, 결과를 캐시하고 요청을 묶으세요.
사이트나 API 운영자라면
클라이언트가 적응할 수 있게 Retry-After와 RateLimit 헤더를 반환하고, IP뿐 아니라 키나 사용자 단위로 제한하세요.
응답 예시
HTTP/1.1
HTTP/1.1 429 Too Many Requests
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
Retry-After: 30
RateLimit-Policy: 100;w=60
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit of 100 requests per minute exceeded."
} 명세
자주 묻는 질문
› 429 후에 얼마나 기다려야 하나요?
Retry-After가 있으면 따르고, 없으면 1, 2, 4, 8초처럼 무작위 지터를 섞어 지수적으로 늘리세요.
› 429가 SEO에 해롭나요?
Googlebot은 429를 보면 크롤링을 늦춥니다. 잠깐은 괜찮지만 오래가면 색인이 늦어질 수 있습니다.