백엔드

HTTP 상태 코드

do_hyuk 2024. 1. 25. 16:02

HTTP 상태 코드?

HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려준다. 응답은 5개의 그룹으로 나누어진다.


분류

  • 1xx (Informational)  :  정보
  • 2xx (Successful)  :  성공
  • 3xx (Redirection)  :  리다이렉션 완료 
  • 4xx (Client Error)  :  요청 오류(클라이언트 오류)
  • 5xx (Server Error)  :  서버 오류

모든 상태 코드에 대한 내용


1xx (Informational)  : 정보

요청을 받았으며 프로세스를 계속 진행한다.

상태 코드 요약 설명
100 Continue 클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 것을 의미/
이미 요청이 완료되었다면, 이 응답은 무시해도 된다.

 


2xx (Successful)  :  성공

요청을 성공적으로 받아서 처리했다.

상태 코드 요약 설명
200 OK 요청이 성공적으로 되었음을 의미
성공의 의미는 HTTP 메소드에 따라 달라진다.

- HEAD : 개체 헤더가 메시지 바디에 있음 
- GET : 개체 헤더가 메시지 바디에 있음
- PUT or POST : 수행 결과에 대한 리소스가 메시지 바디에 전송되었음
- TRACE : 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있음 
201 Created 요청이 성공적으로 수행되었으며, 그 결과로 새로운 리소스가 생성되었음을 의미/
주로 POST 요청 또는 일부 PUT 요청에 대한 응답
202 Accepted 요청이 접수되었지만, 처리는 완료되지 않음(바로 응하여 행동할 수 없음을 의미)/
배치 프로세스와 같이 요청 접수 후 일정 시간이 지난 후 요청을 처리하는 경우의 응답
203 Non-Authoritative Informaion 돌려받은 메타 정보 세트가 오리진 서버의 것과 일치하지 않지만, 로컬이나 서드 파티 복사본에서
모아졌음을 의미함 [200 OK 응답이 반드시 우선됨]
204 No Content 요청이 성공적으로 수행되었고, 응답 payload에 보낼 데이터 없음/
주로 DELETE 요청에 대한 응답
205 Reset Content 서버가 요청을 성공적으로 처리했지만, 콘텐츠를 표시하지 않음/
클라이언트가 콘텐츠를 재설정할 것을 요구
206 Partial Content 복수의 스트림을 분할 다운로드를 하고자 범위 헤더를 전송했기 때문에 사용됨/
서버 GET 요청의 일부만 성공적으로 처리했음을 의미

 


3xx (Redirection)  :  리다이렉션 완료

요청 완료를 위해 추가 작업 조치가 필요하다.

주로 리다이렉트를 할 때 많이 사용된다.
해당 응답을 받으면, 브라우저는 HTTP 헤더에 들어있는 Location 필트를 찾아 해당 필드가 존재할 경우/
Location 필드에 담긴 URL로 자동으로 리다이렉트 시킨다.

 

상태 코드 요약 설명
300 Multiple Choices 요청에 대한 하나 이상의 리소스가 존재함을 의미
301 Moved Permanently 요청한 리소스의 URI가 변경되었음을 의미
302 Found 요청한 리소스의 URI가 일시적으로 변경되었음을 의미
303 See Other 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야할 때의 응답
304 Not Modified 캐시 목적으로 사용되고, 리소스가 수정되지 않음을 의미/
해당 응답을 받으면, 클라이언트는 서버로부터 리소스를 재전송 받지 않고, 캐싱된 리소스를 사용
307 Temporary Redirect 302 Found와 동일한 의미를 가짐/
클라이언트는 HTTP 메소드를 유지한 채 요청을 재송신할 필요가 있음을 의미
308 Permanent Redirect - 리소스가 HTTP 응답 헤더의 Location : 에 명시된 영구히 다른 URI에 위치하고 있음을 의미
- 301 Moved Permanetly와 동일한 의미를 가짐
- 사용자 에이전트가 반드시 HTTP 메소드를 변경하지 말아야 하는 점만 다르다.
- 클라이언트는 HTTP 메소드를 유지한 채 요청을 재송신할 필요가 있음을 의미 

 

리다이렉션 종류

영구적인 리다이렉션(301, 308)

  • 301은 리다이렉트 시킬 때 HTTP 메서드를 GET으로 바꾸고, body 없이 전송
  • 308은 전송 받은 HTTP 메서드를 유지하고, body도 유지하여 전송

일시적인 리다이렉션(302, 307, 303)

  • 302는 리다이렉트시킬 때 HTTP 메서드를 GET으로 바꾸고, body 없이 전송
  • 307은 전송 받은 HTTP 메서드를 유지하고, body도 유지하여 전송
  • 303은 리다이렉트시킬 때 HTTP 메서드를 무조건 GET으로 바꿈
    (302가 애매모호해서 303으로 명확하게 정의되었다고 함)

  • 일시적인 리다이렉션(302,303)을 사용하면, POST → GET 요청으로 변경하여 페이지 새로 고침 등의 동작으로
    POST 요청 중복 처리되는 것을 방지할 수 있다.
    ex) 상품 주문 진행 → 상품 주문 결과 화면으로 이동

특수 리다이렉션(304)

  • 캐싱된 리소스를 사용

4xx (Client Error)  :  요청 오류

요청의 문법이 잘못되었거나 요청을 처리할 수 없다.

클라이언트 오류(잘못된 문법 등)로 인해 서버가 요청을 처리할 수 없음
상태 코드 요약 설명
400 Bad Request 잘못된 문법 등으로 인해 서버가 요청을 이해할 수 없음을 의미
401 Unauthorized - '비인증'을 의미
- 인증되지 않은 사용자가 인증이 필요한 리소스를 요청하는 경우
- 보통 로그인이 필요한 API를 비로그인 사용자가 호출했을 때 사용
403 Forbidden - 클라이언트가 콘텐츠에 접근할 권한을 가지고 있이 않음

- 401과 다른점은 서버가 클라이언트가 누구인지 알고 있다는 것
  보통 특정 IP나 국가가 차단되어 있는 사이트에 접속을 시도한 경우에
  사용된다.
404 Not Found - 요청한 리소스가 존재하지 않음을 의미
- 인증되지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신 이 응답을 전송하기도 함
405 Method Not
Allowed
- 현재 리소스에 맞지 않는 메서드를 사용했음을 의미
   ex) GET 요청만 허용되는데 POST 요청을 한 경우
406 No Acceptable - 알맞은 컨텐츠 타입이 없음을 의미
- 서버의 리소스가 클라이언트의 HTTP 헤더에 들어있는 Accept 필드에
  명시된 콘텐츠 타입이 아닌 경우의 응답
408 Request Timeout 요청에 응답하는 시간이 너무 오래 걸림을 의미
409 Conflic 요청이 현재 서버의 상태와 충돌될 때의 응답
412 Precondition Failed 클라이언트의 헤더에 있는 전제조건은 서버의 전제조건에 적절하지 않음
413 Payload Too Large - 요청이 너무 커서 서버가 처리할 수 없을 때의 응답
- 서버는 연결을 끊거나 Retry-After 헤더 필드로 돌려보낼 것
429 Too many Requests 클라이언트가 지정된 시간에 너무 많은 요청을 보낸 경우의 응답

5xx (Server Error)  :  서버 오류

서버 오류로 인해 서버가 정상 요청을 처리하지 못함

상태 코드 요약 설명
500 Internal Server
Error
- 서버에 오류가 발생하여 응답할 수 없음
- 서버에 오류가 발생했으나 처리 방법을 알 수 없을 경우
501 Not Implement 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미(기능을 지원하지 않음)
502 Bad Gateway - 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미
- 서버의 부모 서버에서 오류가 발생한 경우의 응답
- 보통 서버에 접속하는 사용자가 많아 과부하될 때 발생한다.
503 Service Unavailable - 서버가 요청을 처리할 준비가 되지 않음
- 일반적으로 유지보수를 위해 작동이 중단되거나 과부하가 걸린 경우
504 Gateway Timeout 서버가 게이트웨이 역할을 하고 있으며, 한 서버가 액세스하고 있는 다른 서버에서
적시에 응답을 받지 못했음을 의미