Status Code(HTTP 상태 코드)

Lee Jun Hyeong·2023년 4월 5일
0

HTTP Status Code란 클라이언트가 서버에게 요청(request)을 보내면 서버는 요청(response)에 대해 응답을 보낸다. 이를 통해 요청에 대한 성공/실패 여부를 판단할 수 있다.

모든 HTTP 응답 코드는 5개로 분류할 수 있다.
Status Code의 첫 번째 숫자에 따라 response class가 달라진다.

1xx: 조건부 응답(Informational responses)

서버가 요청을 받았으며 서버에 연결된 클라이언트는 계속 작업을 진행하라는 의미이다.

  • 100 (Countinue)
    클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 것을 의미한다. 만약 클라이언트의 작업이 완료되었다면 이 응답은 무시해도 된다.
  • 101 (Switching Protocol)
    요청 헤더의 Update 필드 중 하나로 서버가 프로토콜을 변경한다.
  • 102 (Processing)
    서버가 요청을 수신하였으며 이를 처리중이지만 아직 제대로된 응답을 주지 못하는 상황을 말한다.

2xx: 성공(Successful)

요청을 정상적으로 처리했음을 의미한다.

  • 200 (OK)
    요청이 성공적으로 수행되었음을 의미한다. 주로 GET 요청에 대한 응답이다.
  • 201 (Created)
    요청이 성공적으로 수행되었으며, 그 결과로 새로운 리소스가 생성됨을 의미한다. 주로 POST 요청에 대한 응답이다.
  • 202 (Accepted)
    요청은 접수되었지만, 처리는 완료되지 않음을 의미한다. 배치 처리와 같이 요청 접수 후 일정 시간이 지난 후 요청을 처리하는 경우의 응답이다.
  • 203 (Non-Authoritative Information)
    요청이 성공적으로 수행되었으나, 요청에 대한 검증이 되지 않음을 의미한다.
  • 204 (No Content)
    요청이 성공적으로 수행되었고, 응답 payload에 보낼 데이터가 없음을 의미한다. 주로 DELETE 요청에 대한 응답으로 사용된다고 한다.
  • 205 (Reset Content)
    서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않으므로 클라이언트가 콘텐츠를 재설정할 것을 요구하는 메시지다.
  • 206 (Partial Conent)
    서버가 GET 요청의 일부만 성공적으로 처리했음을 의미한다.

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

요청 완료를 위해 추가 작업 조치가 필요함 을 의미한다. 주로 리다이렉트를 할 때 많이 사용된다.
해당 응답을 받으면, 브라우저는 HTTP 헤더에 들어있는 Location 필드를 찾아 해당 필드가 존재할 경우, Location 필드에 담긴 URL로 자동으로 리다이렉트한다.

  • 리다이렉트(Redirect) 란?
    말 그대로 re(다시) + 지시하다(direct) 다시 지시하는 것을 말한다.

예를 들어 브라우저가 www.webstone.com/blogA URL을 웹 서버에 요청했다고 하자, 그러면 서버는 HTTP 응답 메시지를 통해 "www.webstone.com/blogB 로 다시 요청해봐~" 라고 브라우저에게 다른 URL(길, 방향) 을 지시할 수 있는 것을 리다이렉트라 한다.

  • 300 (Multiple Choices)
    요청에 대해 하나 이상의 리소스가 존재함을 의미한다.
  • 301 (Moved Permanently)
    요청한 리소스의 URI가 변경되었음을 의미한다.
  • 302 (Found)
    요청한 리소스의 URI가 일시적으로 변경되었음을 의미한다.
  • 303 (See Other)
    요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때의 응답 이다.
  • 304 (Not Modified)
    리소스가 수정되지 않음을 의미한다. 해당 응답을 받으면, 클라이언트는 서버로부터 리소스를 재전송 받지 않고, 캐싱된 리소스를 사용합니다.
  • 307 (Temporary Redirect)
    302와 유사하며, 클라이언트는 HTTP 메서드를 유지한채 요청을 재송신할 필요가 있음을 의미한다.
  • 308 (Permanent Redirect)
    301과 유사하며, 클라이언트는 HTTP 메서드를 유지한채 요청을 재송신할 필요가 있음을 의미합니다.

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)
    서버가 게이트웨이 역할을 하고 있으며, 한 서버가 액세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미한다.

참고
https://velog.io/@sangyeon217/http-status-code
https://hocheon.tistory.com/68
profile
"왜" 사용하며, "어떻게" 사용하는지에 대해

0개의 댓글