HTTP 응답 상태 코드
HTTP 응답 상태 코드
HTTP 응답 상태 코드(HTTP Response Status Codes)
HTTP 응답 상태 코드는 클라이언트가 서버에 요청을 보낼 때 서버가 반환하는 응답의 상태를 나타낸다.
이 코드들은 다섯 가지 카테고리로 나뉘며, 각 카테고리는 응답의 성격을 대략적으로 나타낸다.
| 상태 코드 범위 | 카테고리 | 설명 |
|---|---|---|
| 1xx | 정보 응답 | 요청을 받았으며 프로세스를 계속한다는 임시 응답 |
| 2xx | 성공 | 요청이 성공적으로 수행됨 |
| 3xx | 리다이렉션 | 요청 완료를 위한 추가 동작이 필요함 |
| 4xx | 클라이언트 에러 | 클라이언트 측 오류로 요청을 수행할 수 없음 |
| 5xx | 서버 에러 | 서버 측 오류로 요청을 수행할 수 없음 |
1xx: 정보 응답
| 상태 코드 | 영어 설명 | 한국어 설명 |
|---|---|---|
| 100 | Continue | 계속: 클라이언트는 요청을 계속해야 함 |
| 101 | Switching Protocols | 프로토콜 전환: 요청에 따라 서버가 프로토콜을 전환 |
| 102 | Processing (WebDAV) | 처리 중: 요청을 처리하고 있으나 아직 완료되지 않음 (WebDAV) |
2xx: 성공
| 상태 코드 | 영어 설명 | 한국어 설명 |
|---|---|---|
| 200 | OK | 정상: 요청이 성공적으로 처리됨 |
| 201 | Created | 생성됨: 요청이 성공적으로 이행되었고 새로운 리소스가 생성됨 |
| 202 | Accepted | 수락됨: 요청이 수락되었으나 아직 처리되지 않음 |
| 203 | Non-Authoritative Information | 비공식 정보: 반환된 메타정보는 원 서버의 메타정보와 다를 수 있음 |
| 204 | No Content | 내용 없음: 요청은 성공했으나 전송할 내용이 없음 |
| 205 | Reset Content | 내용 초기화: 요청은 성공했으며 클라이언트는 문서 보기를 초기화해야 함 |
| 206 | Partial Content | 부분 내용: 요청이 성공적으로 이행되었고 일부 내용만 전송됨 |
| 207 | Multi-Status (WebDAV) | 다중 상태: WebDAV에서 사용. 여러 상태 코드가 적합할 수 있음 |
| 208 | Already Reported (WebDAV) | 이미 보고됨: WebDAV의 순환 참조를 방지하기 위해 사용됨 |
| 226 | IM Used | IM 사용됨: 서버가 클라이언트의 GET 요청에 대해 Instance Manipulations를 적용했음 |
3xx: 리다이렉션
| 상태 코드 | 영어 설명 | 한국어 설명 |
|---|---|---|
| 300 | Multiple Choices | 다양한 선택: 요청한 리소스가 여러 형태로 존재할 때 사용자나 사용자 에이전트가 선택할 수 있음 |
| 301 | Moved Permanently | 영구적으로 이동됨: 요청한 리소스가 새 위치로 영구적으로 이동되었음을 나타냄 |
| 302 | Found (Previously “Moved temporarily”) | 발견됨(이전에 “임시로 이동”): 요청한 리소스가 일시적으로 다른 위치로 이동했음을 나타냄 |
| 303 | See Other | 다른 것을 참조: 요청에 대한 응답이 다른 URI에서 찾을 수 있으며, GET 메서드를 사용해야 함을 나타냄 |
| 304 | Not Modified | 수정되지 않음: 클라이언트가 조건부 요청을 했을 때 리소스가 변경되지 않았음을 나타냄 |
| 305 | Use Proxy | 프록시 사용: 요청된 리소스는 프록시를 통해서만 접근해야 함을 나타냄 (보안상의 이유로 현재 사용되지 않음) |
| 307 | Temporary Redirect | 임시 리다이렉션: 요청한 리소스가 일시적으로 다른 URI에 위치함을 나타냄. 요청 메서드와 본문은 변경되지 않음 |
| 308 | Permanent Redirect | 영구 리다이렉션: 요청한 리소스가 다른 URI로 영구적으로 이동했음을 나타냄. 301과 비슷하지만 HTTP 메서드가 변경되지 않음 |
4xx: 클라이언트 에러
| 상태 코드 | 영어 설명 | 한국어 설명 |
|---|---|---|
| 400 | Bad Request | 서버가 요청을 이해할 수 없음 |
| 401 | Unauthorized | 요청이 인증을 필요로 함 |
| 402 | Payment Required | 예약됨 (실제 사용되지 않음) |
| 403 | Forbidden | 서버가 요청을 거부함 |
| 404 | Not Found | 서버가 요청한 리소스를 찾을 수 없음 |
| 405 | Method Not Allowed | 요청된 메서드는 리소스에서 사용할 수 없음 |
| 406 | Not Acceptable | 요청한 리소스는 요청 헤더에서 지정한 조건으로만 응답할 수 없음 |
| 407 | Proxy Authentication Required | 프록시 인증이 필요함 |
| 408 | Request Timeout | 서버가 요청을 기다리는 동안 클라이언트가 요청을 보내지 않음 |
| 409 | Conflict | 요청이 서버의 현재 상태와 충돌 |
| 410 | Gone | 요청한 리소스가 영구적으로 이동되었으며, 새 위치가 알려지지 않음 |
| 411 | Length Required | 유효한 Content-Length 헤더 없이는 서버가 요청을 수락하지 않음 |
| 412 | Precondition Failed | 서버가 요청 헤더에서 주어진 전제 조건을 만족하지 못함 |
| 413 | Payload Too Large | 요청 엔티티가 서버에 의해 정의된 한도보다 큼 |
| 414 | URI Too Long | 요청 URI가 서버에서 해석하기에 너무 길음 |
| 415 | Unsupported Media Type | 요청 엔티티의 미디어 유형이 지원되지 않음 |
| 416 | Range Not Satisfiable | 요청한 범위가 대상 URI의 데이터를 초과함 |
| 417 | Expectation Failed | 서버가 요청의 Expect 헤더 필드에서 주어진 기대를 만족시킬 수 없음 |
| 418 | I’m a teapot | 서버가 찻주전자이며 커피를 끓일 수 없음 (농담 코드) |
| 421 | Misdirected Request | 요청이 잘못된 서버로 전송되었으며 서버가 요청을 처리할 수 없음 |
| 422 | Unprocessable Entity | 요청은 이해했으나, 처리할 수 없는 지시를 포함 (WebDAV) |
| 423 | Locked | 리소스가 잠김 (WebDAV) |
| 424 | Failed Dependency | 요청 실패는 이전 요청의 실패 때문 (WebDAV) |
| 425 | Too Early | 서버가 요청을 처리하기에는 너무 이르며, 잠재적인 재생 공격을 방지하기 위함 |
| 426 | Upgrade Required | 클라이언트는 요청을 계속하기 위해 프로토콜을 업그레이드해야 함 |
| 428 | Precondition Required | 서버는 요청이 조건부 요청이 되기를 원함 |
| 429 | Too Many Requests | 클라이언트가 주어진 시간 동안 너무 많은 요청을 보냄 |
| 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 버전이 지원되지 않음: 서버가 요청에 사용된 HTTP 버전을 지원하지 않음 |
| 506 | Variant Also Negotiates | 변형도 협상: 서버에 내부 구성 오류가 있어 선택된 변형이 자체에 대한 적절한 참조를 통해 협상되고 있음 |
| 507 | Insufficient Storage (WebDAV) | 저장공간 부족 (WebDAV): 서버가 요청을 처리하기 위한 충분한 저장공간이 없음 |
| 508 | Loop Detected (WebDAV) | 루프 감지 (WebDAV): 서버가 요청 처리 중 무한 루프를 감지함 |
| 510 | Not Extended | 확장되지 않음: 요청의 추가 확장을 얻기 위한 필요한 정책을 충족시키지 못함 |
| 511 | Network Authentication Required | 네트워크 인증 필요: 클라이언트가 네트워크에 액세스하기 위해 인증해야 함 |
HTTP 통신에서 서버는 일반적으로 하나의 HTTP 요청에 대해 단일 상태 코드로 응답한다. HTTP 프로토콜의 설계에 따른 것으로, 각 요청/응답 사이클이 한 번의 상호작용을 나타내기 때문이다.
그러나 복잡한 웹 애플리케이션에서는 다음과 같은 상황에서 여러 다른 상태 정보를 전달할 수도 있다.
웹DAV(Web-based Distributed Authoring and Versioning) 웹DAV의 207 Multi-Status 응답은 하나의 요청이 여러 자원에 대해 수행되었을 때 다양한 상태 코드와 메시지를 포함할 수 있는 XML 본문을 통해 여러 결과를 반환할 수 있다. 이는 서버가 각각의 하위 요청에 대한 결과를 별도로 보고할 수 있게 한다.
API 디자인 일부 REST API나 복잡한 웹 서비스는 특정 요청에 대해 복합적인 작업을 수행할 수 있으며, 이 때 각각의 작업 결과를 나타내기 위해 내부적으로 여러 상태 정보를 관리할 수 있다. 하지만 이러한 내부 상태 정보는 일반적으로 API 응답 본문 내에 구조화된 데이터 형태(예: JSON, XML)로 클라이언트에게 전달되며, HTTP 상태 코드 자체는 최종적인 요청의 성공 또는 실패를 나타내는 단일 값으로 반환된다.
This post is licensed under CC BY 4.0 by the author.