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은 애플리케이션 충돌이고, 502와 504는 프록시가 업스트림 서버의 오류 또는 무응답을 보고하는 것이며, 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와 함께 전송될 경우 다운타임 동안 순위를 보호합니다.