[HTTP] 6. HTTP 상태코드

HJ·2022년 8월 3일
0

HTTP

목록 보기
6/8

김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 보고 작성한 내용입니다.
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard


1. 상태 코드

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

  • 1xx ( Informational ) : 요청이 수신되어 처리중

  • 2xx ( Successful ) : 요청 정상 처리

  • 3xx ( Redirection ) : 요청을 완료하려면 추가 행동이 필요

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

  • 5xx ( Server Error ) : 서버 오류, 서버가 정상 요청을 처리하지 못함

  • 서버가 클라이언트가 인식할 수 없는 상태코드를 반환하면 클라이언트는 상위 상태 코드로 해석해서 처리한다

    • ex> 299 --> 2XX ( Successful )



2. 2XX ( Successful )

  • 클라이언트의 요청을 성공적으로 처리
  • 200 OK : 요청 성공
  • 201 Created

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

    • 주로 POST로 등록한 경우에 대한 상태 코드

    • 생성된 리소스는 response message의 Location 헤더 필드로 식별

      • ex> Location: /members/100
  • 202 Accepted

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

    • 배치 처리 ( 일괄 처리 ) 같은 곳에서 사용

  • 204 No Content

    • 서버가 요청을 성공적으로 수행했지만, response message의 body에 보낼 데이터가 없음

    • ex> 웹 문서 편집기에서 save 버튼을 눌렀을 경우에 아무 내용이 없어도 되거나 같은 화면을 유지해야 하는 경우

    • 이러한 경우에는 결과 내용이 없어도 204 상태 코드만으로 성공 인식 가능




3. 3XX ( Redirection )

  • 요청을 완료하기 위해 유저 에이전트( 클라이언트 프로그램, 웹 브라우저를 의미 )의 추가 조치 필요

  • 300 Multiple Choices

  • 301 Moved Permanently

  • 302 Found

  • 303 See Other

  • 304 Not Modified

  • 307 Temporary Redirect

  • 308 Permanent Redirect


3-1. Redirection

  • 리다이렉션 : 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동 ( 리다이렉트 )
  • 영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 이동
  • 임시 리다이렉션

    • 일시적으로 잠깐 이동시키는 경우에 사용

    • 주문 완료 후 주문 내역 화면으로 일시적으로 이동

    • PRG 패턴 : Post/Redirect/Get

  • 특수 리다이렉션

    • 결과 대신 캐시를 사용

3-2. 영구 리다이렉션

  • 리소스의 URI가 영구적으로 이동

  • 원래의 URL를 더 이상 사용하지 않음

  • 검색 엔진 등에서도 URI 변경 인지 할 수 있음

  • 301 Moved Permanently

    • 리다이렉트 시 request message의 method가 GET으로 변할 수 있다 ( 변하지 않을 수도 있음 )

    • message body가 제거될 수 있음 ( 제거되지 않을 수도 있음 )

    • response message는 GET 방식으로 URL을 받았기 때문에 URL에 해당하는 페이지를 보여준다

  • 308 Permanent Redirect

    • 301과 기능 동일

    • 리다이렉트 시 최초 request message의 method 유지

    • message body 유지 ( 데이터 유지 )

    • 처음 request message를 POST 방식으로 보내면 리다이렉트 후 request message도 POST 유지


3-3. 일시적인 리다이렉션

  • 리소스의 URI가 일시적으로 변경

  • 검색 엔진 등에서 URL을 변경하면 안됨

  • 302 Found

    • 리다이렉트 시 request message의 method가 GET으로 변할 수 있다 ( 변하지 않을 수도 있다 )

    • message body가 제거될 수 있다 ( 제거되지 않을 수도 있다 )

    • but> 실제로 대부분 변함

    • 많은 어플리케이션 라이브러리들이 302를 기본값으로 사용

  • 303 See Other

    • 302와 기능은 동일

    • 리다이렉트 시 request message의 method가 GET으로 무조건!! 변한다

  • 307 Temporary Redirect

    • 302와 기능 동일

    • 리다이렉트 시 최초 request message의 method 유지

    • message body 유지 ( 데이터 유지 )

    • 절대!! request message의 method와 body를 변경하면 안된다

  • PRG: Post/Redirect/Get

    • ex> POST로 주문 후에 웹 브라우저를 새로 고침을 누른다 ( 새로 고침은 마지막 요청을 다시 수행 )

    • PRG 패턴을 사용하지 않는 경우

      • 마지막 요청이 POST이기 때문에 중복으로 주문된다
    • 해결 방법 ( = PRG 패턴 사용 )

      • POST로 주문 후에 주문 결과 화면을 GET 방식으로 리다이렉트

      • 새로고침해도 GET으로 결과 화면 조회 ( 중복 주문 방지, 결과 화면만 다시 요청 )


3-4. 기타 리다이렉션

  • 300 Multiple Choices : 사용 X

  • 304 Not Modified

    • 캐시를 목적으로 사용

    • 클라이언트가 서버에게 캐시를 다시 달라고 요청

    • but> 클라이언트가 가진 캐시가 계속 사용 가능한 경우, 클라이언트에게 리소스가 수정되지 않았음을 알려준다

    • 따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용한다 ( 캐시로 리다이렉트 한다 )

    • 304 응답은 클라이언트가 로컬 캐시를 사용해야 하므로 response message의 body를 포함하면 안된다

    • 조건부 GET, HEAD 요청 시 304를 사용




4. 4XX - Client Error

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

  • 오류의 원인이 클라이언트에 있음

  • 클라이언트가 이미 잘못된 요청을 하고 있기 때문에 똑같이 여러 번 재시도해도 계속 실패함

  • 400 Bad Request

    • 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음

    • 클라이언트는 요청 내용을 다시 검토하고, 보내야함

    • ex> 요청 파라미터가 잘못되거나, API 스펙이 맞지 않을 때

  • 401 Unauthorized

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

    • 인증( Authentication ) 되지 않음

    • 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명을 해주어야 함

    • 인증 ( Authentication ) : 본인이 누구인지 확인 ( ex> 로그인 )

    • 인가 ( Authorization ) : 권한 부여 ( ADMIN 권한처럼 특정 리소스에 접근할 수 있는 권한, 인증이 있어야 인가가 있음 )

  • 403 Forbidden

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

    • 주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우

    • ex> 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우

  • 404 Not Found

    • 요청 리소스( 페이지 )를 찾을 수 없음 혹은 서버에 없음

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




5. 5XX - Server Error

  • 서버 문제로 오류 발생

  • 서버에 문제가 있기 때문에 클라이언트가 요청을 재시도 하면 성공할 수도 있음

  • 500 Internal Server Error : 서버 내부 문제로 오류 발생

  • 503 Service Unavailable

    • 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음

    • Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수도 있음

profile
공부한 내용을 정리해서 기록하고 다시 보기 위한 공간

0개의 댓글