HTTP 상태 코드

HUSII·2023년 1월 19일
0

상태 코드
클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
• 1xx (Informational): 요청이 수신되어 처리중
• 2xx (Successful): 요청 정상 처리
• 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
• 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
• 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함


2xx (Successful)
200 OK - 요청 성공
201 Created - 요청 성공해서 새로운 리소스가 생성됨
202 Accepted - 요청이 접수되었으나 처리가 완료되지 않았음
204 No Content - 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음

ex) save 버튼 - save 버튼의 결과로 아무 내용이 없어도 됨


3xx (Redirection)
웹 브라우저는 3xx 응답 결과에 Location 헤더가 있으면, Location 위치로 자동 이동

종류
영구 리다이렉션(301, 308) - 특정 리소스의 URI가 영구적으로 이동
일시 리다이렉션(302, 307, 303) - 일시적인 변경
특수 리다이렉션(304) - 결과 대신 캐시를 사용
300 안씀

PRG(Post/Redirect/Get) 패턴 - 301,302
POST를 통해 상품을 주문하고, 새로고침을 했을때, 리다이렉트 되지않고 한번더 POST로 서버에 전달하면, 중복 주문이 발생할 것이다.
이를 막기 위해 PRG 패턴이 존재한다.
POST를 통해 상품을 주문하고 리다이렉트를 통해 GET방식으로 변경된다. 이때 새로고침을 해도 GET을 보내기 때문에 중복주문을 막을 수 있다.

영구(301) vs 일시(302)
클라이언트(웹 브라우저) 입장에서는 영구, 일시 리다이렉트 모두 같은 결과를 받는다고 한다.
서버 입장에선, 301은 영구적으로 이동했기 때문에, 이전 페이지 정보를 보관하지 않는다.
302는 이전 페이지 정보를 가질 수 있다.

301과 302 리다이렉션을 구분해서 사용해야하는 이유는 간단하다.
구글과 같은 검색엔진에서 페이지 검색 노출도 등과 관련이 있기 때문이다.
301 리다이렉트는 새로운 URL 혹은 사용하지 않는 페이지를 이동시키는데 적합하다.
302 리다이렉트는 기존 URL에 컨텐츠 URL를 추가하려고 할 때 사용하면 유용하다.

  • 무의미하게 사용할 경우, 검색엔진이 302 리다이렉트를 악용하는 광고 컨텐츠들로 판단해 사이트랭크 점수에 패널티를 부여한다.

4xx (Client Error)
오류의 원인이 클라이언트에 있음

  • 똑같이 재시도해도 실패함

400 Bad Request - 클라가 잘못된 요청을 함
401 Unauthorized - 클라가 해당 리소스에 대한 인증이 필요
403 Forbidden - 서버가 요청을 이해했지만 승인 거부(등급이 안될때)
404 Not Found - 요청 리소스가 서버에 없음


5xx (Server Error)
서버 문제로 오류 발생
서버의 문제기 때문에 재시도 하면 성공 가능
500 - 서버 문제 오류(애매하면 500 오류)
503 Service Unavailable - 서비스 이용불가

5xx 상태 코드는 사용하지 않는 것이 좋다

  • 5xx 처리하지 않고, 예외 사항을 따로 만드는 것이 좋음
profile
공부하다가 생긴 궁금한 것들을 정리하는 공간

0개의 댓글