231129 TIL #255 네트워크 #2 HTTP Status Code

김춘복·2023년 11월 28일
0

TIL : Today I Learned

목록 보기
255/543
post-custom-banner

Today I Learned

오늘은 네트워크 공부를 이어서 진행해 HTTP 상태코드에 대해 공부했다. 대략적으로 대표적인 내용은 알고있었으나 구체적으로 어떤 코드가 있고 어떻게 활용되는 지 공부했다.


참고 사이트 : whatap

HTTP Status Code

클라이언트가 서버로 요청을 보냈을 때 서버의 Response(응답)에 포함되어 요청의 처리 상태를 나타내는 3자리의 상태 코드


1xx Informational

요청을 받아 처리중이며 프로세스를 계속 진행함

  • 100 Continue
    진행 중. 현재까지 진행상태에 문제가 없으며 계속 처리할 수 있음

  • 101 Switching Protocol
    클라이언트의 Upgrade 요청 헤더에 대한 응답으로 들어가며, 서버에서 프로토콜을 변경할 것임을 알려줌.
    Websocket 프로토콜 전환 시 사용

  • 102 Processing
    서버가 요청을 수신했으며, 처리하고있지만 아직 제대로된 응답을 알려줄 수 없음


2xx Success

요청을 정상적으로 처리했음

  • 200 OK
    요청이 성공적으로 처리되었음.

  • 201 Created
    요청이 성공적으로 처리되었으며, 그 결과 새로운 리소스가 생성됨.
    일반적으로 POST 요청이나 일부 PUT 요청 이후에 따라옴.

  • 202 Accepted
    요청을 수신했고, 아직 처리 중이지만 나중에 완료될 것으로 예상됨.
    비동기 작업 처리나 백그라운드 작업 혹은 배치 프로세스를 수행하는 경우 사용됨

  • 203 Non-Authoritative Information
    오리진(원본)서버가 아닌 다른 리소스에서 정보를 가져옴.
    프록시나 게이트웨이가 해당 리소스를 캐싱하고 있는 경우에 원본 서버에서 가져온 리소스가 아니라 캐시된 리소스로 응답할 경우 사용됨.

  • 204 No Content
    요청을 성공적으로 수행했지만, 응답으로 전달할 데이터, Body가 없음.
    PUT요청이나 DELETE요청으로 리소스의 상태를 갱신했지만 업데이트 된 내용을 클라이언트에게 전달 할 필요가 없을 때 사용.

  • 205 Reset Content
    클라이언트가 요청을 완료한 뒤 현재 표시중인 문서 뷰를 리셋해야한다고 알리는 코드.

  • 206 Partial Content
    클라이언트가 요청한 리소스의 일부분만 성공적으로 전송됨.
    주로 범위 요청(Range Request)이 있을 때 사용. 클라이언트가 리소스의 특정 범위를 요청하고 서버가 해당 범위 만큼의 데이터를 전송한 경우(ex. 비디오, 이어받기) 발생. 같이 보내는 헤더의 Content-Range에서 어느 부분인지 표시


3xx Redirection

요청을 완료하기 위해 추가적인 동작이나 브라우저 측에서 특별한 처리가 필요

  • 300 Multiple Choice
    요청에 대해 하나 이상의 응답이 가능하고 사용자 Agent나 사용자는 그 중 하나를 반드시 선택해야함

  • 301 Moved Permanently
    요청한 리소스의 URI가 영구적으로 변경됨. 새로운 URI가 응답에서 주어질 수 있음.

  • 302 Found
    요청한 리소스의 URI가 일시적으로 변경됨. 이동한 URI는 추후 변경될 가능성 있음.

  • 303 See Other
    요청에 대한 리소스는 다른 URI에 있기 때문에 새로운 URI로 GET 요청을 보내야 한다고 알림. 302와 기능은 같지만 리다이렉트 장소를 GET 요청으로 얻어야 한다고 명시된 것이 차이점

301, 302, 303은 보통 응답 코드가 돌아오면 대부분의 브라우저에선 POST를 GET으로 바꾸고 Body를 삭제한 뒤 리퀘스트를 자동으로 재송신한다.

  • 304 Not Modified
    요청한 자원이 변경되지 않았으므로 클라이언트에 캐시된 자원으로 리다이렉션하겠다는 코드. 최초 요청시엔 200으로 응답을 받지만 나중에 리소스가 변경되지 않고 클라이언트가 캐시를 가지고 있다면(클라이언트의 캐시가 최신 상태라면) 304 응답을 받는다.

  • 307 Temporary Redirect
    클라이언트가 요청한 리소스가 다른 URI에 있으며 이전 요청과 동일한 메소드를 사용해서 요청해야 함. 302와 의미는 같지만 HTTP 메소드를 변경하지 않아야 하는점이 다르다. (ex. POST로 보냈으면 다시 POST로)


4xx Client Error

클라이언트 원인으로 에러가 발생

  • 400 Bad Request
    잘못된 문법의 요청이거나 서버가 요청을 이해하지 못함

  • 401 Unauthorized
    미승인(unauthorized)보단 비인증(unauthenticated)에 가깝다.
    사용자가 로그인 하지 않았거나 잘못된 인증을 시도한 경우.

  • 402는 추후 결제 시스템을 위해 남겨둔 코드로 지금은 사용 x.

  • 403 Forbidden
    사용자가 요청한 리소스에 대해 접근 권한이 없는 경우.

401과 403의 차이
401은 클라이언트가 누군지 모르니 올바른 자격을 증명하라는 신호,
403은 클라이언트가 누군지 알지만 해당 리소스에 대한 권한이 없는 경우

  • 404 Not Found
    클라이언트가 요처안 리소스를 서버가 찾을 수 없는 경우.
    API 종점은 적절하지만 리소스 자체는 없을 때도 사용.
    인증받지 않은 클라이언트들로 부터 리소스를 숨기기 위해 403 대신 사용할 수 있다.

  • 408 Request Timeout
    요청을 한 지 너무 오래된 연결에 보내거나 클라이언트로부터 어떠한 요청이 없을때 서버가 사용되지 않는 연결을 끊기 위해 사용

  • 429 Too Many Requests
    지정된 시간동안 클라이언트가 너무 많은 요청을 보냄


5xx Server Error

서버 원인으로 에러가 발생

  • 500 Internal Server Error
    서버에서 요청을 처리하는 도중 에러가 발생.
    서버에서 발생한 오류에 대해 구체적으로 설명할 수 없을 때도 사용.

  • 502 Bad Gateway
    주로 게이트웨이나 프록시서버, 로드밸런서 같은 중간 서버에서 유효하지 않은 응답이나 오류가 발생했을 때.
    서버가 다른 서버로부터 유효하지 않은 응답을 받은 경우 발생

  • 503 Service Unavailable
    서버가 요청을 처리할 준비가 되지 않았을 때 사용
    일시적으로 서버가 과부하 상태거나 점검중일 때.
    Retry-After 헤더 필드에 예상 복구 시간을 같이 보내주는 것이 좋다.

  • 504 Gateway Timeout
    주로 게이트웨이나 프록시서버, 로드밸런서 같은 중간 서버에서 요청을 전달하고 응답을 기다리는 동안 외부 서버가 적절한 시간 내에 응답하지 않을 때 발생.
    502가 잘못된 응답으로 발생한다면 504는 응답 시간초과.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글