TIL

HTTP 상태 코드

상태 코드

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능

만약 모르는 상태 코드가 나타나면?

200 OK

요청 성공

201 Created

요청 성공해서 새로운 리소스가 생성됨

생성된 리소스는 응답의 Location 헤더 필드로 식별

202 Accepted

요청이 접수되었으나 처리가 완료되지 않았음

204 No Content

서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음

리다이렉션의 이해

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

자동 리다이렉트 흐름

img.png

  1. 원래 사용하던 /event 페이지의 URI 경로가 /new-event로 변경되었다.
  2. 기존의 URI를 북마크하던 사람이 있을 수도 있고 원래 URI를 알고 있는 많은 사람들이 있을텐데 그 사람들이 /event로 접속하면 /new-event로 리다이렉트 시킨다. (301 Moved Permanently)

리다이렉트 종류

영구 리다이레션

301, 308

영구 리다이렉션 - 301

  1. 옛날 URI로 메시지 바디에 정보를 담아 POST를 보낸다.
  2. 새로운 URI로 리다이렉트를 시키는 데 메시지 바디가 사라지고 GET 요청으로 변경한다.
  3. 이벤트 참여 Form을 작성했었더라면 처음부터 다시 작성해야 한다.

영구 리다이렉션 - 308

  1. 똑같은데 리다이렉트 시 본문을 유지한다.
  2. 이벤트 참여가 등록이 된다.
    • 이게 스펙이기 때문에 설명한 거지 실무에서는 거의 이렇게 안 한다.
    • 일반적으로 URI가 바뀌면 내부적으로 전달해야 하는 데이터가 다 바뀐다.
    • 때문에 POST로 와도 301로 GET으로 돌리는 게 낫다.
    • 실무에서 308은 거의 못 봤다고 한다.

일시적인 리다이렉션

302, 307, 303

PRG: Post/Redirect/Get

PRG 사용 전

  1. 주문 DB에 저장
  2. 새로고침
  3. 마지막 요청인 주문을 다시 한 번 DB에 저장

PRG 사용 후

  1. 주문 DB에 저장
  2. GET으로 리다이렉트
  3. 새로고침하면 마지막 요청인 GET 보냄
  4. 주문 중복 저장 안 됨

물론 이런 중복 주문은 PRG로 만족할 게 아니라 서버에서 잘 막아야 한다. 상품 ID이런 걸로 중복 주문은 잘 거르자

기타 리다이렉션

300, 304

4xx, 5xx 오류 차이

400 Bad Request

401 Unauthorized

클라이언트가 해당 리소스에 대한 인증이 필요함

403 Forbidden

서버가 요청을 이해했지만 승인을 거부함

404 Not Found

500 Internal Server Error

서버 문제로 오류 발생, 애매하면 500 오류

503 Service Unavailable

서비스 이용 불가