[네트워크] 응용 계층(Application) - 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.