HTTP(하이퍼텍스트 전송 프로토콜)의 응답 상태 코드의 정의에 대해 알아보겠습니다.
HTTP 응답 상태 코드는 HTTP 프로토콜에서 요청자에게 전달되는 응답 코드로 해당 요청의 정상여부 또는 서버 처리의 정상 여부를 알 수 있도록 3자리 숫자 코드로 응답하는 값입니다. HTTP 응답 상태 코드는 현재 IANA(Internet Assigned Numbers Authority, 인터넷 할당 번호 관리기관)가 공식 관리하고 있으며 그 외 서버 소프트웨어가 별도로 정의한 비표준 응답 코드가 있습니다. HTTP 응답 코드는 5개의 클래스(분류)로 구분되며 상태 코드의 첫 번째 숫자는 응답의 클래스를 정의합니다. 마지막 두 자리는 클래스나 분류 역할을 하지 않습니다.
목차
HTTP 응답 상태 코드 클래스 (분류)
- 1xx : (정보응답) 요청을 받았으며 프로세스를 계속 진행함.
- 2xx : (성공응답) 요청을 성공적으로 받았으며 인식했고 수용함.
- 3xx : (리다이렉션 메시지) 요청 완료를 위해 추가 작업 조치가 필요함.
- 4xx : (클라이언트 오류) 요청의 문법이 잘못되었거나 요청을 처리할 수 없음.
- 5xx : (서버 오류) 서버에 유효한 요청이 아니거나 서버의 오류로 요청 처리에 실패함.
HTTP 응답 상태 코드 상세
1xx : 정보 응답
100 Continue
진행 중임을 의미하는 응답 코드로 클라이언트가 요청을 계속하거나 요청이 이미 완료된 경우 응답을 무시해야 함을 나타냅니다.
101 Switching Protocols
클라이언트의 Upgrade 요청 헤더에 대한 응답으로 전송되며 서버가 프로토콜을 변경할 것임을 의미합니다.
102 Processing (WebDAV)
서버가 요청을 수신하여 처리 중이지만 아직 사용할 수 있는 응답이 없음을 나타냅니다.
103 Early Hints
Link헤더와 함께 사용하기 위한 것이며 서버가 응답을 준비하는 동안 사용자 에이전트가 리소스를 미리 로드할 수 있도록 합니다.
2xx : 성공 응답
200 OK
요청이 성공했음을 나타냅니다. “성공”의 결과 의미는 HTTP 메서드에 따라 다릅니다.
- GET: 메시지 본문에서 리소스를 가져와서 전송됨
- HEAD: 표현 헤더는 메시지 본문 없이 응답에 포함됨
- PUT 또는 POST: 작업의 결과를 설명하는 리소스가 메시지 본문에서 전송됨
- TRACE: 메시지 본문에는 서버에서 수신한 요청 메시지가 포함됨
201 Created
요청이 성공했으며 결과적으로 새 리소스가 생성되었습니다. 일반적으로 POST 요청 또는 일부 PUT 요청 후에 전송되는 응답입니다.
202 Accepted
요청을 받았지만 아직 처리되지 않았습니다. HTTP에는 나중에 요청 결과를 나타내는 비동기 응답을 보낼 수 있는 방법이 없기 때문에 커밋되지 않습니다. 다른 프로세스나 서버가 요청을 처리하는 경우 또는 일괄 처리를 위한 것입니다.
203 Non-Authoritative Information
반환된 메타데이터가 원본 서버에서 사용 가능한 것과 정확히 동일하지 않지만 로컬 또는 타사 복사본에서 수집됨을 의미합니다. 이것은 주로 다른 리소스의 미러 또는 백업에 사용됩니다. 특정한 경우를 제외하고는 200 OK이 상태보다 응답이 우선입니다.
204 No Content
요청에 대해 보낼 콘텐츠가 없지만 헤더가 유용할 수 있습니다. 사용자 에이전트는 이 리소스에 대한 캐시 된 헤더를 새 헤더로 업데이트할 수 있습니다.
205 Reset Content
요청을 보낸 문서를 재설정하도록 사용자 에이전트에 지시합니다.
206 Partial Content
Range리소스의 일부만 요청하기 위해 클라이언트에서 헤더를 보낼 때 사용됩니다.
207 Multi-Status (WebDAV)
여러 상태 코드가 적절할 수 있는 상황에 대해 여러 리소스에 대한 정보를 전달합니다.
208 Already Reported (WebDAV)
동일한 컬렉션에 대한 여러 바인딩의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 응답 요소 내부에서 사용됩니다.
226 IM Used
서버는 GET리소스에 대한 요청을 수행했으며 응답은 현재 인스턴스에 적용된 하나 이상의 인스턴스 조작 결과를 나타냅니다.
※ HTTP Delta Encoding 전용
3xx
300 Multiple Choices
요청에 가능한 응답이 두 개 이상 있습니다. 사용자 에이전트 또는 사용자는 그중 하나를 선택해야 합니다. (응답 중 하나를 선택하는 표준화된 방법은 없지만 사용자가 선택할 수 있도록 가능성에 대한 HTML 링크가 권장됩니다.)
301 Moved Permanently
요청한 리소스의 URL이 영구적으로 변경되었습니다. 새 URL이 응답에 제공됩니다.
302 Found
요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다. 앞으로 URI가 추가로 변경될 수 있습니다. 따라서 클라이언트는 향후 변경된 URI를 사용해야 합니다.
303 See Other
서버는 클라이언트가 GET 요청으로 다른 URI에서 요청된 리소스를 가져오도록 지시하기 위해 이 응답을 보냈습니다.
304 Not Modified
캐싱 목적으로 사용됩니다. 클라이언트에게 응답이 수정되지 않았음을 알리므로 클라이언트는 캐시 된 동일한 버전의 응답을 계속 사용할 수 있습니다.
305 Use Proxy
요청된 응답이 프락시에 의해 액세스 되어야 함을 나타내기 위해 HTTP 사양의 이전 버전에서 정의되었습니다. HTTP 상태 코드 305는 클라이언트가 요청한 리소스를 프록시를 통해서만 사용할 수 있으며 프록시의 주소가 서버의 응답에 제공됨을 의미합니다.
※ 305 코드는 프록시 대역의 구성과 관련된 보안 문제로 대부분의 브라우저가 따르지 않습니다.
306 unused
306 코드는 더 이상 사용되지 않습니다. 이전 버전의 HTTP/1.1 사양에서 예약되어 있습니다.
307 Temporary Redirect
클라이언트가 이전 요청에서 사용된 것과 동일한 HTTP 메서드로 다른 URI에서 요청된 리소스를 가져오도록 지시합니다. 302 응답 코드와 다른 점은 URI를 변경하면서 HTTP 메서드를 동일하게 유지해야 하는 점입니다. 예를 들어 첫 요청에 HTTP 메서드가 POST가 사용되었다면, 두 번째 요청도 반드시 POST를 사용해야 합니다.
308 Permanent Redirect
리소스가 이제 Location:HTTP 응답 헤더로 지정된 다른 URI에 영구적으로 위치한다는 것을 의미합니다. 이것은 사용자 에이전트가 사용된 HTTP 메서드를 변경해서는 301 Moved Permanently 안 된다는 점을 제외하고는 HTTP 응답 코드와 동일한 의미를 갖습니다. a가 첫 번째 요청에서 사용된 경우 두 번째 요청에서 a를 사용해야 합니다.
4xx 클라이언트 오류 응답
400 Bad Request
서버는 클라이언트 오류로 인식되는 것으로 인해 요청을 처리할 수 없거나 처리하지 않습니다(예: 잘못된 요청 구문, 잘못된 요청 메시지 프레이밍 또는 사기성 요청 라우팅).
401 Unauthorized
HTTP 표준이 “인증되지 않음”을 지정하지만 의미상 이 응답은 “인증되지 않음”을 의미합니다. 즉, 클라이언트는 요청된 응답을 얻기 위해 자신을 인증해야 합니다.
402 Payment Required
향후 사용을 위해 예약된 비표준 클라이언트 오류 상태 응답 코드입니다. 이 코드를 만드는 초기 목표는 디지털 결제 시스템에 사용하는 것이지만 이 상태 코드는 매우 드물게 사용되며 표준 규칙이 없습니다.
※ 402 코드는 실험적 기술로 브라우저 호환성 문제 있음
403 Forbidden
클라이언트가 콘텐츠에 대한 액세스 권한이 없습니다. 즉, 권한이 없으므로 서버가 요청된 리소스를 제공을 거부했다는 뜻입니다.
404 Not Found
404는 자주 접하는 오류로 가장 유명한 HTTP 응답 코드 일 것입니다. 404는 요청한 리소스를 서버가 찾을 수 없을 때 나는 오류 코드입니다. 브라우저에서 URL이 인식되지 않음을 의미하며 API에서는 엔드포인트가 유효하지만 리소스 자체가 존재하지 않음을 의미할 수도 있습니다. 404 응답 코드는 다른 응답 코드를 숨기기 위해 대신 내보낼 때 사용되기도 합니다. 예를 들어 403 응답은 리소스의 존재 여부를 알 수 있게 되므로 403 대신 404로 표시하여 서버 상황을 숨기게 됩니다.
405 Method Not Allowed
요청 방법은 서버에서 알고 있지만 대상 리소스에서 지원하지 않습니다. 예를 들어 API는 DELETE리소스 제거를 위한 호출을 허용하지 않을 수 있습니다.
406 Not Acceptable
406 응답은 사용자 에이전트가 제공한 기준에 맞는 콘텐츠를 찾지 못할 때 전송됩니다.
407 Proxy Authentication Required
407 응답 코드는 401 코드와 유사합니다. 다른 점은 프록시에서 인증을 수행해야 합니다.
408 Request Timeout
클라이언트의 이전 요청이 없더라도 일부 서버의 유휴 연결에서 전송됩니다. 이는 서버가 이 사용되지 않는 연결을 종료하려고 함을 의미합니다. 이 응답은 Chrome, Firefox 27+ 또는 IE9와 같은 일부 브라우저가 HTTP 사전 연결 메커니즘을 사용하여 서핑 속도를 높이기 때문에 훨씬 더 많이 사용됩니다. 또한 일부 서버는 이 메시지를 보내지 않고 연결을 종료합니다.
409 Conflict
이 응답은 요청이 서버의 현재 상태와 충돌할 때 전송됩니다.
410 Gone
이 응답은 요청된 콘텐츠가 전달 주소 없이 서버에서 영구적으로 삭제되었을 때 전송됩니다. 클라이언트는 캐시와 리소스 링크를 제거해야 합니다. HTTP 사양은 이 상태 코드가 “한정된 프로모션 서비스”에 사용되도록 의도하고 있습니다. API는 이 상태 코드로 삭제된 리소스를 나타내도록 강요되어서는 안 됩니다.
411 Length Required
Content-Length헤더 필드가 정의되어 있지 않고 서버에서 요구하기 때문에 서버에서 요청을 거부했습니다.
412 Precondition Failed
클라이언트가 헤더에 서버가 충족하지 않는 전제 조건을 표시했습니다.
413 Payload Too Large
요청 엔터티가 서버에서 정의한 제한보다 큽니다. 서버가 연결을 닫거나 Retry-After헤더 필드를 반환할 수 있습니다.
414 URI Too Long
클라이언트가 요청한 URI가 서버가 해석할 수 있는 것보다 깁니다.
415 Unsupported Media Type
요청한 데이터의 미디어 형식이 서버에서 지원되지 않아 서버가 요청을 거부하고 있습니다.
416 Range Not Satisfiable
요청의 헤더 필드에 지정된 범위 Range를 충족할 수 없습니다. 범위가 대상 URI의 데이터 크기를 벗어날 수 있습니다.
417 Expectation Failed
Expect이 응답 코드는 요청 헤더 필드에 표시된 기대치를 서버에서 충족할 수 없음을 의미합니다.
418 I’m a teapot
서버가 자신이 찻주전자라고 말하는 응답 코드입니다. 서버가 찻주전자이므로 커피를 내리는 것은 거부합니다.
※ 418 응답 코드는 이스트애그입니다. 1998년 만우절에 IETF가 정식으로 배포한 RFC2324에 명시되어 있습니다.
※ 418 응답 코드를 실제 볼 수 있는 구글 페이지 : https://www.google.com/teapot
421 Misdirected Request
요청이 응답을 생성할 수 없는 서버로 전달되었습니다. 이것은 요청 URI에 포함된 체계와 권한의 조합에 대한 응답을 생성하도록 구성되지 않은 서버에서 보낼 수 있습니다.
422 Unprocessable Entity (WebDAV)
요청의 형식이 적절했지만 의미 오류로 인해 따를 수 없었습니다.
423 Locked (WebDAV)
액세스 중인 리소스가 잠겨 있습니다.
424 Failed Dependency (WebDAV)
이전 요청의 실패로 인해 요청이 실패했습니다.
425 Too Early
서버가 재생될 수 있는 요청을 처리하는 위험을 감수하지 않음을 나타냅니다.
※ 425 응답 코드는 실험적 기술로 브라우저 호환성 문제 있음
426 Upgrade Required
서버가 현재 프로토콜을 사용하여 요청은 거부하지만 클라이언트가 다른 프로토콜로 바꾼 후 수행할 수 있음을 나타냅니다. 서버는 Upgrade(변경)이 필요한 프로토콜을 나타내기 위해 426 응답으로 헤더를 보냅니다.
428 Precondition Required
원본 서버는 조건부 요청을 요구합니다. 이 응답은 제3자가 서버의 상태를 수정하여 충돌을 일으키는 동안 클라이언트 리소스의 상태를 수정하고 서버로 다시 보내는 ‘업데이트 손실’ 문제를 방지하기 위한 것입니다.
429 Too Many Requests
사용자가 주어진 시간 동안 너무 많은 요청을 보냈습니다
431 Request Header Fields Too Large
헤더 필드가 너무 커서 서버가 요청을 처리하지 않습니다. 요청 헤더 필드의 크기를 줄인 후 요청을 다시 제출할 수 있습니다.
451 Unavailable For Legal Reasons
사용자 에이전트는 정부에서 검열한 웹 페이지와 같이 법적으로 제공할 수 없는 리소스를 요청했습니다.
5xx : 서버 오류 응답
500 Internal Server Error
서버가 처리 방법을 모르거나 오류가 있어 요청을 수행할 수 없습니다
501 Not Implemented
요청 방법은 서버에서 지원하지 않으며 처리할 수 없습니다. 서버가 지원해야 하는 유일한 메서드(따라서 이 코드를 반환하지 않아야 함)는 GET 및 HEAD입니다.
502 Bad Gateway
이 오류 응답은 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작동하는 동안 잘못된 응답을 받았음을 의미합니다.
503 Service Unavailable
서버가 요청을 처리할 준비가 되지 않았습니다. 일반적인 원인은 유지 관리를 위해 다운되거나 과부하된 서버입니다. 이 응답과 함께 문제를 설명하는 사용자 친화적인 페이지를 보내야 합니다. 이 응답은 임시 조건에 Retry-After를 사용해야 하며 HTTP 헤더에는 가능한 경우 서비스 복구 전 예상 시간이 포함되어야 합니다. 이러한 임시 조건 응답은 일반적으로 캐시 되지 않아야 하므로 웹마스터는 이 응답과 함께 전송되는 캐싱 관련 헤더에 대해서도 주의를 기울여야 합니다.
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
클라이언트가 네트워크 액세스 권한을 얻기 위해 인증해야 함을 나타냅니다.
[ 참고 ]