HTTP 상태 코드
1xx~5xx 모든 HTTP 상태 코드를 설명과 함께 검색할 수 있는 완전한 참조 문서. 무료, 브라우저에서 처리.
- 브라우저에서 처리
- 데이터가 브라우저 밖으로 나가지 않습니다
- 무료 · 회원가입 불필요
WeChat으로 스캔하여 공유
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.
상태 코드 카테고리
- 1xx 정보: 임시 응답 — 요청 수신됨, 서버가 아직 처리 중.
- 2xx 성공: 요청이 수신, 이해, 수락됨.
- 3xx 리다이렉션: 요청을 완료하려면 추가 조치 필요.
- 4xx 클라이언트 오류: 요청에 잘못된 구문이 있거나 처리 불가.
- 5xx 서버 오류: 서버가 유효한 요청 처리에 실패.
API에서 어떤 상태 코드를 쓸까
| 상황 | 코드 |
|---|---|
GET으로 리소스 반환 | 200 |
POST로 리소스 생성 | 201 (Location 헤더 포함) |
성공했지만 본문 없음 (주로 DELETE) | 204 |
| 본문이 올바른 JSON이 아니거나 구문 오류 | 400 |
| 토큰이 없거나 유효하지 않음 | 401 |
| 토큰은 유효하지만 권한 없음 | 403 |
| 리소스가 없음 | 404 |
| 중복 (이미 가입된 이메일 등) | 409 |
| 본문은 파싱되지만 업무 규칙 위반 (종료일이 시작일보다 앞섬) | 422 |
| 요청 한도 초과 | 429 |
| 처리되지 않은 예외 | 500 |
401과 403. 401은 서버가 요청자를 식별하지 못한 상태이며, 401을 보내는 서버는 WWW-Authenticate 헤더도 반드시 보내야 합니다(RFC 9110 §15.5.2). 403은 요청자를 알지만 이 작업을 허용하지 않는 상태입니다. 리소스가 존재한다는 사실을 숨겨야 하면 403 대신 404를 보낼 수 있습니다(§15.5.4).
리다이렉트와 요청 메서드. 역사적인 이유로 브라우저는 301과 302를 따라갈 때 POST를 GET으로 바꿀 수 있습니다(§15.4.2). 307과 308은 메서드와 본문을 유지해야 합니다. 폼 POST를 POST로 유지해야 하면 307이나 308을 쓰세요.
코드와 함께 보내는 헤더
| 코드 | 헤더 | 규정 |
|---|---|---|
| 201 | Location: /api/users/456 | 새 리소스를 가리킴 |
| 401 | WWW-Authenticate: Bearer realm="api" | 필수 |
| 405 | Allow: GET, POST | 필수 (§15.5.6) |
| 429, 503 | Retry-After: 60 | 선택. 초 또는 HTTP 날짜 (RFC 6585 §4) |
| 304 | — | 본문 없음. 클라이언트가 캐시를 사용 |
JavaScript에서 처리하기
fetch()는 4xx나 5xx에서 reject하지 않습니다. 네트워크 오류일 때만 reject하므로 res.ok(200–299이면 true)나 res.status를 확인하세요.
const res = await fetch('/api/orders', { method: 'POST', body });
if (res.status === 401) return redirectToLogin();
if (res.status === 429) {
const wait = Number(res.headers.get('Retry-After') ?? 60);
return retryAfter(wait);
}
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const order = await res.json();
제한 사항
- 등록된 코드 61개. 목록은 IANA 레지스트리를 따릅니다. nginx 499나 Cloudflare 520–526처럼 특정 제품만 쓰는 코드는 없습니다.
- 두 코드는 예전 이름입니다. 목록의 413 Payload Too Large와 422 Unprocessable Entity는 RFC 9110에서 Content Too Large와 Unprocessable Content로 이름이 바뀌었습니다.
- 설명은 영어로만 나옵니다. 모든 언어 페이지에서 이름과 설명이 영어입니다. 검색은 코드, 이름, 영어 설명의 단어와 일치하는 항목을 찾으므로 「리다이렉트」로는 결과가 없고
redirect로 검색해야 합니다.
FAQ
HTTP 상태 코드 범위별 의미는 무엇입니까?
1xx=정보(요청 수신, 처리 중), 2xx=성공(요청 완료), 3xx=리다이렉션(추가 조치 필요), 4xx=클라이언트 오류(잘못된 요청, 미인증 등), 5xx=서버 오류(유효한 요청 처리 실패).
301과 302의 차이는 무엇입니까?
301(영구 이동)은 브라우저와 검색 엔진에 기록 업데이트를 지시합니다 — 리소스가 영구적으로 이동했습니다. 302(Found)는 임시 리다이렉션으로, 클라이언트는 향후에도 원래 URL을 사용해야 합니다.
404와 410의 차이는 무엇입니까?
리소스가 존재하지 않고 복구 여부가 불확실할 때는 404 Not Found를 사용합니다. 리소스가 영구 삭제되어 절대 돌아오지 않을 때는 410 Gone을 사용합니다 — 검색 엔진에 인덱스에서 제거하도록 알립니다.
API에서 429가 중요한 이유는 무엇입니까?
429(요청 과다)는 속도 제한의 표준 응답 코드입니다. 클라이언트는 Retry-After 헤더를 존중하고 서버에 과도한 요청을 방지하기 위해 지수 백오프를 구현해야 합니다.