[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/네트워크

[Network] HTTP 상태코드

inu 2021. 6. 26. 18:24
반응형

  • 상태코드란 클라이언트가 보낸 요청에 대한 처리 상태를 응답에서 알려주는 기능을 하는 코드이다.
  • 100번대부터 500번대까지 존재하며, 각 코드마다 정해진 의미가 있다.
  • 클라이언트는 해당 상태 코드들에 대해 반응하여 정해진 작업을 수행한다.
  • 클라이언트가 인식할 수 없는 상태 코드를 서버가 반환하는 경우, 클라이언트는 상위 상태코드로 해석해서 작업을 처리한다.
  • 100번대는 Informational로, 요청이 수신되어 처리중이라는 뜻인데, 거의 사용하지 않으므로 설명에서 생략한다.

200번대 (Successful) : 요청 정상 처리

  • 200 (OK) : 요청에 대해 성공적으로 처리했음을 의미
  • 201 (Created) : 요청에 성공해서 서버에서 새로운 리소스를 생성했음을 의미, 응답에 Location 헤더가 존재하며 그 곳에 리소스 위치가 담겨있다.
  • 202 (Accepted) : 요청이 접수되었으나 아직 처리가 완료되지는 않았음을 의미 (ex. 요청 접수 후 일정 시간 후에 배치 프로세스가 요청 처리)
  • 204 (No Content) : 요청은 성공적으로 수행했으나, 응답 페이로드 본문에 보낼 데이터는 없음을 의미 (ex. 웹 문서 편집기에서 저장버튼 클릭, 서버로부터 아무런 추가적 내용을 필요로 하지 않는다.)

300번대 (Redirection): 요청을 완료하려면 추가 행동이 필요

  • 웹 브라우저는 300번대 응답의 결과에 Location 헤더가 있을 경우 해당 위치로 자동 이동한다. (=Redirection)
  • 영구 리다이렉션, 일시 리다이렉션, 특수 리다이렉션 종류가 존재

영구 리다이렉션

  • 특정 리소스의 URI가 영구적으로 이동되는 경우
  • 원래의 URI를 아예 사용하지 않게 된다. 검색 엔진 등에서도 이를 인지하게 된다.
  • 301 (Moved Permanently) : 리다이렉트 시 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음
  • 308 (Permanent Redirect) : 301과 기능은 같지만 요청 메서드와 본문이 유지된다.
  • 실무에서 더 많이 쓰이는 것은 301이다. 영구 리다이렉션을 할 경우 폼이 변경되는 경우가 많아 요청 메서드와 본문을 그대로 유지하는 경우가 적기 때문이다.

일시 리다이렉션

  • 특정 리소스의 URI가 일시적으로 변경되는 경우
  • 검색 엔진 등에서 URI가 변경되지 않음
  • 기능은 영구 리다이렉션과 같지만 일시적임에 유의해야 한다.
  • 302 (Found) : 리다이렉트 시 요청 메소드가 GET으로 변하고 본문이 제거될 수 있음
  • 307 (Temporary Redirect) : 302와 기능은 같지만 요청 메서드와 본문이 유지된다.
  • 303 (See Other) : 302와 기능은 같지만 요청 메서드가 고정적으로 GET으로 변경된다.
  • PRG (Post/Redirect/Get) : 일시 리다이렉션의 예로, Post 후 Get으로 리다이렉트하는 것을 뜻한다. Post로 주문 요청 후 새로고침을 수행했을 때 중복 주문이 발생하는 것을 방지한다. Get으로 결과화면을 리다이렉트함으로써, 새로고침을 해도 결과화면만 요청되도록 한다.
  • 307,303으로 나눠서 사용할 것을 권장하지만 실무에선 대부분 302를 많이 사용한다.

특수 리다이렉션

  • 결과 대신 캐시를 이용해야하는 경우
  • 304 (Not Modified) : 클라이언트에게 리소스가 수정되지 않았음을 알려주어, 클라이언트가 로컬에 저장된 캐시를 재사용할 수 있도록 한다. (캐시로 리다이렉트) 따라서 메시지 바디를 포함하지 않는다.

400번대 (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음

  • 오류의 원인이 클라이언트에게 있다.
  • 클라이언트가 잘못된 요청을 보내고 있기 때문에 몇번을 똑같이 재시도해도 실패한다.
  • 401 (Unauthorized) : 해당 리소스에 대한 인증(Authentication)이 필요한 경우. 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명한다.
  • 참고로 인증은 Authentication로 본인이 누구인지 확인하는 로그인의 과정을 의미하며, 인가는 Authorization로 관리자권한같은 권한부여적 의미를 가진다. 401은 인증(Authentication)이 필요한 경우인데 이름이 Unauthorized로 명명된 점이 조금 아쉬움.
  • 403 (Forbidden) : 서버가 승인을 거부하는 경우. 주로 인증 자격증명은 있지만 접근 권한이 없는 경우이다.
  • 404 (Not Found) : 서버에 요청 리소스가 없는 경우. (혹은 서버가 권한이 부족한 클라이언트에 대해 리소스에 접근을 숨기고 싶은 경우)

500번대 (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함

  • 오류의 원인이 서버에게 있다.
  • 서버 문제이기 때문에 똑같이 재시도를 수행해도 성공할 수 있다.
  • 500 (Internal Server Error) : 서버 내부 문제 총칭, 애매하면 500 오류로 처리한다.
  • 503 (Service Unavailable) : 서버 과부하로 잠시 요청을 처리할 수 없음. Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수도 있음.
반응형

'💻 CS > 네트워크' 카테고리의 다른 글

[Network] HTTP 헤더 : 캐시와 조건부요청  (0) 2021.07.10
[Network] HTTP 일반헤더  (0) 2021.07.06
[Network] HTTP API 설계 예시  (1) 2021.06.12
[Network] HTTP 메서드 활용  (0) 2021.06.10
[Network] HTTP 메서드 기초  (0) 2021.05.16