IT/HTTP

[HTTP] HTTP 상태코드

happy_life 2022. 6. 4. 21:06

목차

1. HTTP 상태코드 소개

2. 2xx - 성공

3. 3xx - 리다이렉션

4. 4xx - 클라이언트 오류

5. 5xx - 서버 오류

1. HTTP 상태코드 소개

  • 1xx (Informational): 요청이 수신되어 처리중(잘 사용X)
  • 2xx (Successful): 요청 정상 처리
  • 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
  • 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
  • 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함

 

 만약 미래에 새로운 상태 코드가 추가되어도 앞자리를 보고 의미를 파악하면 된다.

 

2. 2xx - 성공

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

 

 

3. 3xx - 리다이렉션

 요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요함을 의미

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

 

1) 리다이렉션 동작 순서

 

기존의 url을 공유받은 사람들은 접속해야하는 경우, URL이 변경되었다면 접근할 수 없게 된다. 만약 기존의 /event URL로 접근하는 클라이언트가 있다면 서버에서는 301 응답결과에 Location에 변경된 URL 값을 넣어 보내게 된다. 이후 새로운 URL로 다시 접근을 하게 된다. 이를 리다이렉트라고 한다.

 

2) 리다이렉션 종류

 영구 리다이렉션

특징

  • 특정 리소스의 URL이 영구적으로 이동한 경우
  • /members -> /users
  • /event -> /new-event

 

 

종류

 

1. 301 Moved Permanently

  • 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)

 

 

예를들어 이름과 나이를 입력해 POST로 보내는 경우, Ridirect에 의해 GET으로 바뀐 뒤 변경된 URL에 요청을 하게 된다. 그럼 바뀐 아마 URL에서 다시 form이 있고 이름과 나이를 입력해 전송하는 버튼이 있는 URL로 이동하게 될 것이다.

 

 

2. 308 Permanent Redirect

  • 리다이렉트 시 요청 메서드와 본문 유지(처음 POST 면 리다이렉트도 POST)

 

 

POST가 유지되면서 따로 창에 값을 입력하지 않아도 변경된 URL로 이동한다. 하지만 실무의 경우 이벤트 창이 바뀌면 입력할 정보도 바뀌므로, 이렇게 잘 쓰진 않는다.

 

 일시 리다이렉션

특징

  • 주문 완료 후 주문 내역 화면으로 이동
  • PRG: Post/Redirect/Get
  • 리소스의 URL이 일시적으로 변경
  • 따라서 검색 엔진 등에서 URL을 변경하면 안됨

 

 

종류

 

1. 302 Found

  • 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)

 

 

2. 307 Temporary Redirect

  • 302와 기능은 같음
  • 리다이렉트 시 요청 메서드와 본문 유지(MUST NOT)

 

 

3. 303 See Other

  • 302와 기능은 같음
  • 리다이렉트 시 요청 메서드가 GET으로 변경(MUST)

 

 

PRG - 일시적 리다이렉션을 써야하는 이유

  • POST로 주문 후 새로 고침으로 인한 중복 주문 방지
  • POST로 주문 후 주문 결과 화면을 GET 메서드로 리다이렉트
  • 새로고침해도 결과 화면을 GET으로 조회

 

 * PRG 사용 전

 

 

 * PRG 사용 후

 

 

정리

  • 303, 307이 명확하여 권장하지만, 이미 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용한다.
  • 자동 리다이렉션 시 GET으로 변해도 되면 302 사용해도 큰 문제가 없다.

 

 

4. 304 Not Modified

  • 클라이언트에게 리소스가 수정되지 않았음을 알림. 따라서 클라이언트는 로컬에 저장된 캐시를 재사용하면 된다는 뜻

 

4. 4xx - 클라이언트 오류

특징

  • 클라이언트의 요청에 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
  • 오류의 원인이 클라이언트에게 있음

 

 

종류

 

1. 400 Bad Request

  • 요청 구문, 메시지 등 오류
  • 클라이언트는 요청 내용을 다시 검토하고, 보내야함

 

 

2. 401 Unauthorized 

  • 클라이언트가 해당 리소스에 대한 인증이 필요함
  • 인증(Authentication): 본인이 누구인지 확인 (로그인)
  • 인가(Authorization): 유효한 인증 정보가 부족하여 인가 요청을 거부하는 경우

 

 

3. 403 Forbidden

  • 서버가 요청을 이해했지만 승인을 거부함
  • 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우

 

 

4. 404 Not Found

  • 요청 리소스가 서버에 없음
  • 또는 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때

 

5. 5xx - 서버 오류

특징

  • 서버 문제로 오류 발생, 재시도 하면 성공할 수 있음

 

 

종류

  

1. 500 Internal Server Error

  • 서버 내부 문제로 오류 발생
  • 애매하면 500 오류

 

 

2. 503 Service Unavailable

  • 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없는 경우
  • Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수 있음 ( 메이플 점검)

 

출처: 김영한님 인프런 강의

 

'IT > HTTP' 카테고리의 다른 글

[HTTP] HTTP 헤더  (0) 2022.06.05
[HTTP] HTTP 메서드  (0) 2022.06.04
[HTTP] HTTP 기본  (0) 2022.06.03
[HTTP] 인터넷 네트워크  (0) 2022.06.01