HTTP 상태 코드

HTTP 응답 상태 코드의 전체 참조 목록입니다. 각 코드가 의미하는 바, 서버가 이를 전송하는 시점, 그리고 대응 방법까지 다룹니다 — 요청 디버깅, API 문서화, 서버 로그 검토에 유용합니다.

바로가기 링크를 사용해 응답 클래스 사이를 이동하거나, 가장 많이 사용되는 코드에 대한 상세 가이드를 열어보세요.

HTTP 응답 코드 표

Code 이름 의미
1xx 정보
100 Continue 서버가 요청 헤더를 수신했으며 클라이언트는 요청 본문을 전송해야 합니다.
101 Switching Protocols 서버가 Upgrade 헤더에서 요청된 프로토콜로 전환하는 데 동의합니다.
102 Processing 서버가 전체 요청을 수락했지만 아직 처리를 완료하지 않았습니다(WebDAV).
103 Early Hints 최종 응답이 전송되기 전에 보내는 예비 헤더로, 대부분 Link 프리로드 힌트입니다.
2xx 성공
200 OK 요청이 성공했으며 응답에 요청한 표현이 담겨 있습니다.
201 Created 요청이 성공했으며 새 리소스가 생성되었습니다. 보통 Location에 이름이 명시됩니다.
202 Accepted 요청이 비동기 처리를 위해 수락되었으며 아직 완료되지 않았습니다.
203 Non-Authoritative Information 응답이 전달 과정에서 변환 프록시에 의해 수정되었습니다.
204 No Content 요청이 성공했으며 의도적으로 응답 본문이 없습니다.
205 초기화 Content 요청이 성공했으며 클라이언트는 문서 보기나 폼을 초기화해야 합니다.
206 Partial Content 응답은 Range 헤더로 요청한 바이트 범위만 전달합니다.
3xx 리디렉션
300 Multiple Choices 여러 표현이 존재하며 클라이언트가 그중 하나를 선택해야 합니다.
301 Moved Permanently 리소스에 영구적인 새 URL이 생겼으며 링크를 업데이트해야 합니다.
302 Found 리소스가 일시적으로 다른 URL에 있습니다. 원래 URL을 계속 사용하세요.
303 See Other 결과는 다른 URL에서 확인할 수 있으며 GET으로 가져와야 합니다.
304 Not Modified 캐시된 사본이 여전히 유효하므로 본문이 다시 전송되지 않습니다.
307 Temporary Redirect 원래 HTTP 메서드와 본문을 반드시 유지해야 하는 임시 리디렉션입니다.
308 Permanent Redirect 원래 HTTP 메서드와 본문을 반드시 유지해야 하는 영구 리디렉션입니다.
4xx 클라이언트 오류
400 Bad Request 요청 형식이 잘못되어 서버가 이를 처리할 수 없습니다.
401 Unauthorized 유효한 인증 자격 증명이 필요하지만 누락되었거나 올바르지 않습니다.
402 Payment Required 예약된 상태 코드로, 실제로는 일부 API에서 결제 한도 표시에 사용됩니다.
403 Forbidden 서버가 요청을 이해했지만 승인을 거부합니다.
404 Not Found 요청한 URL에 존재하는 리소스가 없습니다.
405 Method Not Allowed URL은 존재하지만 이 HTTP 메서드를 지원하지 않습니다.
406 Not Acceptable Accept 협상 헤더와 일치하는 표현이 없습니다.
407 Proxy Authentication Required 클라이언트는 먼저 프록시에 인증해야 합니다.
408 Request Timeout 요청이 도착하는 데 시간이 너무 오래 걸려 서버가 연결을 닫았습니다.
409 Conflict 편집 충돌과 같이 요청이 리소스의 현재 상태와 충돌합니다.
410 Gone 리소스가 의도적으로 삭제되었으며 다시 제공되지 않습니다.
411 Length Required 요청에 Content-Length 헤더가 포함되어야 합니다.
412 Precondition Failed If-Match와 같은 조건부 헤더가 false로 평가되었습니다.
413 Content Too Large 요청 본문이 서버가 허용하는 크기를 초과합니다.
414 URI Too Long 요청 URL이 서버가 파싱할 수 있는 길이보다 깁니다.
415 Unsupported Media Type 요청 본문의 형식이 이 리소스에서 지원되지 않습니다.
416 Range Not Satisfiable 요청한 바이트 범위가 리소스 크기를 벗어납니다.
417 Expectation Failed Expect 요청 헤더를 충족할 수 없습니다.
418 I'm a teapot RFC 2324에서 유래한 만우절 상태 코드로, 일부 API에서는 이스터에그로 사용합니다.
421 Misdirected Request 요청이 해당 권한(authority)에 대한 응답을 생성할 수 없는 서버에 도달했습니다.
422 Unprocessable Content 요청 형식은 올바르지만 의미상 유효하지 않으며, REST 유효성 검사에서 흔히 발생합니다.
425 Too Early 서버가 재전송될 수 있는 요청(TLS 조기 데이터)의 처리를 거부합니다.
426 Upgrade Required 클라이언트는 Upgrade에 명시된 다른 프로토콜로 전환해야 합니다.
428 Precondition Required 서버는 업데이트 유실을 방지하기 위해 조건부 요청을 요구합니다.
429 Too Many Requests 클라이언트가 속도 제한을 초과했습니다. Retry-After로 재시도 시점을 알 수 있습니다.
431 Request Header Fields Too Large 쿠키 등 헤더의 크기가 서버의 제한을 초과합니다.
451 Unavailable For Legal Reasons 법원 명령 등 법적인 이유로 접근이 차단됩니다.
5xx 서버 오류
500 Internal Server Error 요청을 처리하는 중 서버에서 예기치 않은 오류가 발생했습니다.
501 Not Implemented 서버가 요청 메서드를 인식하지 못하거나 지원하지 않습니다.
502 Bad Gateway 게이트웨이 또는 프록시가 업스트림 서버로부터 잘못된 응답을 받았습니다.
503 Service Unavailable 서버가 과부하 또는 유지보수로 인해 일시적으로 응답할 수 없습니다.
504 Gateway Timeout 게이트웨이 또는 프록시가 업스트림 서버의 응답을 기다리다 포기했습니다.
505 HTTP Version Not Supported 서버가 사용된 HTTP 프로토콜 버전을 지원하지 않습니다.
506 Variant Also Negotiates 서버의 콘텐츠 협상 설정 오류입니다.
507 Insufficient Storage 서버가 요청을 완료하는 데 필요한 저장 공간을 확보할 수 없습니다(WebDAV).
508 Loop Detected 서버가 처리 중 무한 루프를 감지했습니다(WebDAV).
510 Not Extended 요청을 처리하려면 제공되지 않은 추가 확장이 필요합니다.
511 Network Authentication Required 네트워크(예: 캡티브 포털)에서 먼저 인증을 요구합니다.

1xx 정보

정보 응답은 요청이 수신되었으며 클라이언트가 계속 진행할 수 있음을 확인합니다. 이는 중간 단계이며, 최종 상태 코드가 항상 뒤따릅니다. 실제로 자주 접하게 되는 것은 103 Early Hints로, 전체 응답이 준비되기 전에 서버가 프리로드 힌트를 미리 전송할 수 있게 해줍니다.

2xx 성공

성공 응답은 요청이 정상적으로 이해되고 수락되었음을 의미합니다. 200 OK는 결과를 응답 본문에 담아 전달하고, 201 Created는 새 리소스가 생성되었음을 알리며, 204 No Content는 반환할 내용이 의도적으로 없는 상태에서 성공을 확인합니다.

3xx 리디렉션

리디렉션 응답은 클라이언트를 다른 곳으로 안내합니다. 핵심은 영구성 여부입니다 — 301/308은 영구적이고, 302/307은 일시적입니다 — 그리고 HTTP 메서드를 그대로 유지해야 하는지(307/308) 아니면 GET으로 변경될 수 있는지(301/302)도 중요합니다. 304 Not Modified는 브라우저 캐싱을 가능하게 하는 특별한 경우입니다.

4xx 클라이언트 오류

클라이언트 오류는 요청 자체가 거부되었음을 의미합니다. 자주 접하는 것들은 다음과 같습니다: 400 잘못된 형식의 요청, 401 인증 필요, 403 접근 거부, 404 해당 URL에 리소스 없음, 429 속도 제한 초과.

5xx 서버 오류

서버 오류는 완전히 유효했을 수도 있는 요청에 대해 서버가 처리에 실패했음을 의미합니다. 500은 애플리케이션 충돌이고, 502504는 프록시가 업스트림 서버의 오류 또는 무응답을 보고하는 것이며, 503은 의도적이고 일시적인 서비스 불가 상태입니다.

상태 코드를 읽는 방법

첫 번째 숫자는 클래스를 나타냅니다: 1xx 정보, 2xx 성공, 3xx 리디렉션, 4xx 클라이언트 오류, 5xx 서버 오류. 클라이언트는 알 수 없는 코드를 만나면 안전하게 해당 클래스의 x00 코드로 취급할 수 있습니다 — 이 덕분에 새로운 코드도 하위 호환성을 유지합니다. 디버깅할 때는 항상 코드와 함께 응답 헤더를 확인하세요: Location은 리디렉션을 설명하고, Allow는 405를, Retry-After는 429와 503을 설명합니다.

예시

200 OK                    — page served normally
301 Moved Permanently     — URL changed for good, follow Location
304 Not Modified          — your cached copy is still valid
404 Not Found             — nothing exists at this URL
429 Too Many Requests     — rate limit hit, wait Retry-After seconds
503 Service Unavailable   — temporary downtime or maintenance

자주 묻는 질문

HTTP 404란 무엇인가요?

HTTP 404는 요청한 URL에서 리소스를 찾을 수 없음을 의미합니다. 원인, 해결 방법, SEO에 미치는 영향은 404 상세 가이드를 참고하세요.

301과 302의 차이는 무엇인가요?

301 리디렉션은 영구적입니다 — 링크와 검색 엔진은 새 URL로 업데이트되어야 합니다. 302는 일시적인 이동을 나타내며 원래 URL이 정규 URL로 유지됩니다.

503은 무엇을 의미하나요?

HTTP 503은 서비스를 일시적으로 사용할 수 없음을 의미하며, 보통 유지보수나 과부하가 원인입니다. 클라이언트는 일정 시간 후 다시 시도해야 합니다.

401과 403의 차이는 무엇인가요?

401은 서버가 유효한 인증 자격 증명을 필요로 함을 의미합니다. 403은 서버가 요청자를 알고 있음에도 접근을 거부하는 것으로, 다시 로그인해도 소용없습니다.

502와 504의 차이는 무엇인가요?

둘 다 업스트림 서버와 통신하는 프록시에서 발생합니다: 502는 업스트림이 잘못된 응답을 반환했음을, 504는 제한 시간 내에 응답하지 않았음을 의미합니다.

SEO에 가장 중요한 상태 코드는 무엇인가요?

200은 색인 가능한 페이지를 나타내고, 301/308은 영구 이동 시 순위를 이전하며, 404/410은 죽은 URL을 제거하고, 503은 Retry-After와 함께 전송될 경우 다운타임 동안 순위를 보호합니다.