-
HTTP 상태 코드개발자로서 알아야 할 CS/HTTP 웹 기본 지식 2022. 2. 1. 13:34728x90반응형
HTTP 상태 코드
클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다. 첫 번째 자리가 1~5인 3자리 숫자로 이루어져 있으며 상태 코드로 요청에 의한 응답이 잘 이루어졌는지, 아니면 문제가 발생하였는지 알 수 있다.
- 1xx (Informational) : 요청이 수신되어 처리중
- 2xx (Successful) : 요청 정상 처리
- 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요(추가 요청)
- 4xx (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error) : 서버 오류, 서버가 정상적으로 요청을 처리하지 못함(DB 접근이 불가능 상태 등)
2xx (Successful)
상태 코드 요약 설명 200 OK 요청이 성공적으로 수행되었음을 의미합니다. 주로 GET 요청에 대한 응답 입니다. 201 Created 요청이 성공적으로 수행되었으며, 그 결과로 새로운 리소스가 생성됨을 의미합니다. 주로 POST 요청에 대한 응답 입니다. 202 Accepted 요청은 접수되었지만, 처리는 완료되지 않음을 의미합니다. 배치 처리와 같이 요청 접수 후 일정 시간이 지난 후 요청을 처리하는 경우의 응답 입니다. 203 Non-Authoritative Information 요청이 성공적으로 수행되었으나, 요청에 대한 검증이 되지 않음을 의미합니다. 204 No Content 요청이 성공적으로 수행되었고, 응답 payload에 보낼 데이터가 없음을 의미합니다. 주로 삭제 요청에 대한 응답으로 사용된다고 합니다. 205 Reset Content 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않습니다. 클라이언트가 콘텐츠를 재설정할 것을 요구합니다. 206 Partial Conent 서버가 GET 요청의 일부만 성공적으로 처리했음을 의미합니다.
3xx (Redirection)
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 리다이렉트 처리를 한다.
상태 코드 요약 설명 300 Multiple Choices 요청에 대해 하나 이상의 리소스가 존재함을 의미합니다. 301 Moved Permanently 요청한 리소스의 URI가 변경되었음을 의미합니다. 브라우저는 HTTP 헤더에 들어있는 Location 필드를 찾아 해당 필드가 존재할 경우, Location 필드에 담긴 URL로 자동으로 리다이렉션합니다. 302 Found 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다. 303 See Other 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때의 응답 입니다. 304 Not Modified 수정되지 않음을 의미합니다. 해당 응답을 받으면, 클라이언트는 서버로부터 리소스를 재전송 받지 않고, 캐싱된 리소스를 사용합니다. 307 Temporary Redirect 302와 유사하며, User-Agent가 반드시 HTTP 메소드를 변경하지 말아야 한다는 점만 다릅니다. 308 Permanent Redirect 301과 유사하며, User-Agent가 반드시 HTTP 메소드를 변경하지 말아야 한다는 점만 다릅니다. 리다이렉션의 종류
- 영구 리다이렉션
- 특정 리소스의 URI가 영구적으로 이동
- 원래의 URL를 사용 X
- 301 : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.
- 308 : 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
- 일시적인 리다이렉션
- 리소스의 URI가 일시적으로 변경
- 302 : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 307 : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)
- 303 : 리다이렉트시 요청 메서드가 GET으로 변경
일시적인 리다이렉션은 실무에서 많이 쓰이는 방식이다. 위 이미지를 보면 일시적 리다이렉션을 사용하지 않으면 주문이 완료된 페이지에서 새로고침 하게 되면 다시 주문처리 요청이 발생하게 된다. 때문에 주문이 중복 요청 처리가 되어 원하지 않는 결과가 나올 수 있게 된다. 이와 같은 문제를 방지하기 위해 중복 요청 처리가 되지 않도록 주문 결과 페이지가 새로고침해도 주문 데이터를 조회하여 주문 완료 결과 화면만을 나타내기 위해 리다이렉션을 통해 응답 처리를 해야 한다.
4xx (Client Error)
- 클라이언트의 잘못된 문법 등으로 인한 요청으로 발생하는 오류
- 오류의 원인이 클라이언트에게 있기 때문에 재시도해도 오류를 발생한다.
상태 코드 요약 설명 400 Bad Request 잘못된 문법 등으로 인해 클라이언트가 올바르지 못한 요청을 보내 서버가 요청을 이해할 수 없음을 의미합니다 401 Unauthorized 인증되지 않은 사용자가 인증이 필요한 리소스를 요청하는 경우의 응답 입니다. 보통 로그인이 필요한 API를 비로그인 사용자가 호출했을 때 사용됩니다 403 Forbidden 클라이언트가 콘텐츠에 접근할 권한을 가지고 있지 않음을 의미합니다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있다는 것입니다. 보통 특정 IP나 국가가 차단되어 있는 사이트에 접속을 시도한 경우 사용됩니다 404 Not Found 요청한 리소스가 존재하지 않음을 의미합니다. 인증되지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신 이 응답을 전송하기도 합니다 405 Method Not Allowed 현재 리소스에 맞지 않는 메소드를 사용했음을 의미합니다. 예로는 GET 요청만 허용되는데 POST 요청을 한 경우의 응답입니다 406 No Acceptable 알맞은 컨텐츠 타입이 없음을 의미합니다. 서버의 리소스가 클라이언트의 HTTP 헤더에 들어있는 Accept 필드에 명시된 콘텐츠 타입이 아닌 경우의 응답입니다 408 Request Timeout 요청에 응답하는 시간이 너무 오래 걸림을 의미합니다. 409 Conflict 요청이 현재 서버의 상태와 충돌될 때의 응답입니다 412 Precondition Failed 서버가 요청자가 요청 시 부과한 사전조건을 만족하지 않을 때의 응답입니다. 413 Payload Too Large 요청이 너무 커서 서버가 처리할 수 없을 때의 응답입니다 429 Too many Requests 클라이언트가 지정된 시간에 너무 많은 요청을 보낸 경우의 응답입니다.
5xx (Server Error)
상태 코드 요약 설명 500 Internal Server Error 서버에 오류가 발생하여 응답할 수 없음을 의미합니다. 서버에 오류가 발생했으나 처리 방법을 알 수 없을 경우의 응답입니다 501 Not Implemented 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미합니다. 502 Bad Gateway 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미합니다. 서버의 부모 서버에서 오류가 발생한 경우의 응답입니다. 보통 서버에 접속하는 사용자가 많아 과부하될 때 발생합니다 503 Service Unavailable 서버가 요청을 처리할 준비가 되지 않음을 의미합니다. 일반적으로 유지보수를 위해 작동이 중단되거나 과부하가 걸린 경우의 응답입니다 504 Gateway Timeout 서버가 게이트웨이 역할을 하고 있으며, 한 서버가 액세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미합니다. 728x90반응형'개발자로서 알아야 할 CS > HTTP 웹 기본 지식' 카테고리의 다른 글
HTTP 캐시(Cache)와 조건부 요청에 따른 처리와 프록시 캐시 (0) 2022.02.01 HTTP 헤더(HTTP header) (0) 2022.02.01 HTTP 메서드의 데이터 전송 방법 (0) 2022.01.27 HTTP 메서드 (0) 2022.01.27 HTTP 메시지(HTTP message) (0) 2022.01.26