기술 일반/기타

REST API 응답에 사용되는 HTTP 상태 코드

단칸이 2021. 8. 31. 22:58

100번대 상태 코드 (정보 응답)

1996년 HTTP/1.0 표준 이후로 100번대 상태 코드는 사용하지 않으며, 서버는 실험적인 상태를 제외하고 이 응답을 보내지 않습니다.

상태 코드 설명
100 (Continue) 클라이언트는 요청을 계속해야 합니다. 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며, 나머지를 기다리고 있음을 의미합니다.
101 (Switching Protocols) 클라이언트가 서버에 프로토콜 전환을 요청했으며, 서버는 이를 승인하는 중임을 의미합니다.
102 (Processing) WebDAV 요청 (RFC 2518)
103 (Early Hints) 최종 HTTP 메시지를 보내기 전, 헤더의 일부분을 전송할 때 사용합니다. (RFC 8297)

200번대 상태 코드 (성공)

200번대 상태 코드는 클라이언트의 요청을 수신하여 성공적으로 처리하였음을 의미합니다.

상태 코드 설명
200 (OK) 서버가 요청을 정상적으로 처리했음을 의미합니다.
201 (Created) 요청이 정상적으로 처리되어 서버가 새로운 리소스를 생성했음을 의미합니다.
202 (Accepted) 서버가 요청을 접수했지만, 아직 처리하지 않았음을 의미합니다. 주로 비동기 작업에 사용됩니다.
203 (Non-Authoritave Information) 서버가 프록시 서버와 같은 다른 소스로부터 200 (OK) 응답을 받았으며, 원래 요청에 대한 응답으로 이를 전송하는 것을 의미합니다.
204 (No Content) 서버가 요청을 성공적으로 처리했지만, 응답 내용은 의도적으로 제공하지 않는 경우에 사용합니다.
205 (Reset Content) 서버가 요청을 성공적으로 처리했지만, 컨텐츠를 표시하지 않습니다. 204 응답과 달리 이 응답은 클라이언트가 브라우저를 리셋할 것을 요구합니다. (새 입력을 위한 양식 비우기 등에 사용합니다.)
206 (Partial Content) 서버가 GET 요청의 일부만 성공적으로 처리한 경우 사용합니다.
207 (Multi-Status) WebDAV에서 사용 (RFC 4918)
208 (Already Reported) WebDAV에서 사용 (RFC 5842)
226 (IM Used) 서버가 요청을 처리하였으며, 응답은 현재 인스턴스에 적용된 하나 이상의 인스턴스 조작 결과를 나타냅니다. (RFC 3229)
업데이트가 빈번히 이루어지는 경우에서, 전체 인스턴스가 아닌 캐시된 내용에서 변경된 사항만 응답하는 경우 사용할 수 있습니다.

300번대 상태 코드 (리다이렉션)

300번대 상태 코드는 클라이언트가 요청을 완료하기 위해 추가 조치를 취해야 함을 의미합니다.

상태 코드 설명
300 (Multiple Choices) 서버가 요청에 따라 여러 조치를 취할 수 있습니다. 서버는 클라이엉ㄴ트가 선택할 수 있는 작업 목록을 제공해야 합니다.
301 (Moved Permanently) 요청한 페이지가 새로운 위치로 이동되었음을 의미합니다.
302 (Found) 현재 서버가 다른 위치의 경로로 응답하고 있지만, 클라이언트는 향후 요청 시 원래 경로로 요청해야 합니다.

REST API 디자인 규칙 도서의 저자에 따르면, 해당 코드는 사용하지 않으며 일반적으로 303 또는 307번 상태 코드를 사용한다고 합니다.
303 (See Other) 클라이언트가 다른 URI에 요청하여 응답을 받을 수 있는 경우, 서버는 이 코드를 응답합니다.
304 (Not Modified) 마지막 요청 이후 해당 페이지는 수정되지 않았음을 의미합니다.
305 (Use Proxy) 클라이언트는 프록시를 사용하여 요청한 페이지에만 접근할 수 있음을 의미합니다. 따라서 서버는 클라이언트가 사용할 프록시 정보를 제공해야 합니다.

보안상의 이유로 많은 HTTP 클라이언트 (Firefox, IE 등)는 이 상태 코드를 따르지 않습니다.
306 (Switch Proxy) 더 이상 사용되지 않는 코드입니다. (원래 의미는 '이후 요청은 지정된 프록시를 사용해야 한다'는 의미입니다.)
307 (Temporary Redirect) 서버가 임시로 사용할 다른 URI 경로를 응답하지만, 향후에는 여전히 원래 URI로 요청을 보내야 함을 의미합니다.
308 (Permanent Redirect) 이후의 모든 요청은 변경된 URI를 사용해야 함을 의미합니다. 이 응답은 301과 유사하지만, HTTP 메소드가 변경되는 것을 허용하지 않습니다.

400번대 상태 코드 (클라이언트 오류)

400번대 상태 코드는 클라이언트의 요청에 문제가 있음을 의미합니다.

상태 코드 설명
400 (Bad Request) 클라이언트 요청의 문법상 오류가 있어 서버가 요청을 인식하지 못했음을 의미합니다.
401 (Unauthorized) 클라이언트가 특정 리소스에 접근할 수 있는 권한이 없음을 의미합니다.
402 (Payment Required) 아직 사용되지 않는 코드입니다. (원래 의미는 이 요청은 디지털 화폐의 결제가 필요함을 나타냅니다.)
403 (Forbidden) 클라이언트의 인증 여부와 관계 없이 해당 URI에 대한 접근 권한이 없는 경우를 의미합니다. (401은 인증 실패, 403은 인가 실패라고 볼 수 있습니다.)
404 (Not Found) 클라이언트가 요청한 리소스를 찾을 수 없는 경우 이 상태를 응답합니다.
405 (Method Not Allowd) 클라이언트의 요청에 명시된 메소드를 수행할 수 없는 경우를 의미합니다. 예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 등이 여기에 해당됩니다.
406 (Not Acceptable) 클라이언트의 요청 헤더에 있는 미디어 타입으로 응답할 수 없는 경우 사용합니다.
407 (Proxy Authentication
Required)
프록시 서버의 인증이 필요함을 의미합니다. 이 상태 코드는 401과 유사하지만, 클라이언트가 프록시 서버에 인증해야 한다는 점이 다릅니다.
408 (Request Timeout) 서버의 요청 대기가 시간을 초과하였음을 의미합니다.
409 (Conflict) 리소스의 상태 충돌로 인해 요청을 처리할 수 없음을 의미합니다. 주로 PUT 요청으로 리소스를 업데이트하는 경우에 발생합니다.
410 (Gone)
요청한 리소스가 영구적으로 삭제되었을 때 이 응답을 표시합니다. (대부분의 사용 환경에서는 404 상태 코드를 응답하는 것으로 보입니다.)
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)
클라이언트가 일부 데이터를 요청했지만, 서버가 해당 부분을 제공할 수 없는 경우 이 상태를 응답합니다. 예를 들어 클라이언트가 파일의 끝을 넘어 일부를 요청한 경우, 이 상태 코드를 응답할 수 있습니다.
417 (Expectation Failed)
서버가 Expect 요청 헤더의 요구사항을 충족할 수 없는 경우 이 상태를 응답합니다.

500번대 상태 코드 (서버 오류)

서버 오류로 인해 요청을 처리하지 못했음을 의미합니다.

웹 프레임워크는 대부분 예외 상황을 발생시키는 요청이 실행될 경우, 자동적으로 500번 상태 코드를 응답합니다.

웹 서버(Apache, Nginx 등)에서 발생하는 어쩔 수 없는 오류를 제외하고, API 레벨에서는 예외처리를 통해 가능한 500번대가 아닌 400번대 상태 코드를 반환하는 것을 권장합니다. (저희 팀에서는 500번대 상태 코드가 수신된 경우, 백엔드 측에서 예외처리가 되지 않은 것으로 간주하고 개발자를 갈굽니다.

상태 코드 설명
500 (Internal Server Error) 서버에 오류가 발생하여 요청을 수행할 수 없는 경우 이 상태를 응답합니다.
501 (Not Implemented) 서버에 해당 요청을 처리할 수 있는 기능이 없는 경우 이 상태를 응답합니다.
502 (Bad Gateway) 서버가 게이트웨이나 프록시 역할을 하거나, 또는 업스트림 서버에서 잘못된 응답을 받은 경우를 의미합니다.
503 (Service Unavailable) 유지관리를 위해 서버가 다운되었거나, 현재 서버를 이용할 수 없는 경우를 의미합니다.
504 (Gateway Timeout) 서버가 게이트웨이나 프록시 역할을 하고 있을 때 사용되는 상태입니다. 원래 서버가 원격 서버로부터 응답을 받을 수 없는 경우를 의미합니다.
505 (HTTP Version Not Supported) 클라이언트가 요청한 HTTP 버전을 사용할 수 없는 경우를 의미합니다.

자료 출처

'기술 일반 > 기타' 카테고리의 다른 글

FTP의 동작 방식 (Active / Passive)  (0) 2021.07.24
오픈 소스 라이선스  (0) 2021.07.14