minghxx.blog
  • [HTTP] HTTP 웹 기본 지식 6) HTTP 상태코드
    2023년 11월 03일 09시 48분 43초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    HTTP 웹 기본 지식

    Session 6 HTTP 상태코드

    1. HTTP 상태코드 소개

    1) 상태코드

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

    1xx Infromational : 요청이 수신되어 처리 중, 잘 사용하지 않음

    2xx Successful : 요청 정상 처리

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

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

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

     

    2) 모르는 상태 코드가 나타나면?

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

    새로운 상태 코드가 추가되어도 클라이언트를 변경하지 않아도 됨

    299 ▶ 2xx Successful


    2. 2xx - 성공

    1) 2xx

    클라이언트의 요청을 성공적으로 처리

    200 OK

    201 Created

    202 Accepted

    204 No Content

     

    2) 200 OK

    요청 응답을 정상 처리 했을 때

     

    3) 201 Created

    요청에 성공해서 새로운 리소스가 생성됐을 때

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

    4) 202 Accepted

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

    배치처리 같은 곳에서 사용되나 잘 사용하지 않음

     

    5) 204 No Content

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

    웹 문서 편집기에서 save 했을 때 같은 화면을 유지해야 한다. 결과내용이 없어도 204 메시지 만으로 성공을 인식할 수 있다.


    3. 3xx - 리다이렉션 1

    1) 3xx Redirection

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

    300 Multiple Choices

    301 Moved Permanently

    302 Found

    303 See Other

    304 Not Modified

    307 Temporary Redirect

    308 Permanent Redirect

     

    2) 리다이렉션 이해

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

     

    3) 자동 리다이렉트 흐름

    /event 경로의 페이지를 새로운 경로 페이지로 영구 변경할 때

    기존 /event 경로로 들어오는 고객들을 자동으로 /new-event 경로로 리다이렉트 해준다.

     

    4) 리다이렉션 이해

    - 영구 리다이렉션

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

    - 일시 리다이렉션

    일시적인 변경

    주문 완료 후 주문 내역 화면으로 이동

    PRG : Post/Redirect/Get

    - 특수 리다이렉션

    결과 대신 캐시를 사용

     

    5) 영구 리다이렉션 301, 308

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

    원래 URI를 사용하지 않고 검색 엔진 등에서도 변경 인지

     

    5-1) 301 Moved Permanently

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

    리다이렉트 되면서 기존 입력했던 데이터는 없진

    5-2) 308 Permanent Redirect

    301과 기능은 같음, 리다이렉트시 요청 메서드와 본문 유지(POST로 보내면 리다이렉트도 POST)

    입력했던 데이터를 그대로 유지


    4. 3xx - 리다이렉션 2

    1) 일시적인 리다이렉션 302, 307, 303

    리소스의 URI가 일시적으로 변경, 검색 엔진 등에서 URI 변경하면 안 됨

     

    1-1) 303 Found

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

     

    1-2) 307 Temporary Redirect

    302와 기능은 같음리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안 된다. MUST NOT)

     

    1-3) 303 See Other

    302와 기능은 같음

    리다이렉트시 요청 메서드가 GET으로 변경

     

    2) PRG : Post/Redirect/Get

    - 예시 PRG 전 

    POST로 주문 후 결과 페이지에서 웹 브라우저를 새로고침 하면? ▶ 중복 주문이 될 수 있다.

    - 예시 PRG 후

    Post로 주문 루 새로고침으로 인한 중복 주문 방지

    ▶ 주문 후 결과 화면을 GET 메서드로 리다이렉트

    새 로고침해도 결과 화면을 GET으로 조회

    중복 주문 대신 결과 화면만 GET으로 다시 요청

    3번 302 Found로 리다이렉트

    5번 GET으로 조회

    URL 이미 POST → GET으로 리다이렉트 됨, 새로고침해도 GET으로 결과화면만 조회

     

    3) 그래서 뭘 써야 하나요?

    302 → GET으로 변할 수 있음

    307 → 메서드가 변하면 안 됨

    303 → 메서드가 GET으로 변경

    307, 303을 권장하지만 현실적으로 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용

    자동 리다이렉션시에 GET으로 변해도 되면 그냥 302를 사용해도 큰 문제는 없음

     

    4) 기타 리다이렉션

    - 300 Multiple Choice : 안 씀

    - 304 Not Modified

    캐시 목적으로 사용

    클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬 PC에 저장된 캐시 재사용(캐시로 리다이렉트)

    304 응답은 응답에 메시지 바디 포함하면 안 됨(로컬 캐시를 사용하기 때문)

    조건부 GET, HEAD 요청 시 사용


    5. 4xx - 클라이언트 오류, 5xx - 서버 오류

    1) 4xx 클라이언트 오류

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

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

    클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에, 똑같은 재시도가 실패함, 복구가 불가능

     

    1-1) 400 Bad Request

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

    요청 구문, 메시지 등등 오류

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

    예) 요청 파라미터 오류, API 스펙이 맞지 않을 때

     

    1-2) 401 Unauthorized

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

    인증이 되지 않아 발생, 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명

    - 참고

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

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

     

    1-3) 403 Forbidden

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

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

    예) ADMIN 등급이 아닌 사용자가 로그인했지만 ADMIN 등급 리소스에 접근하는 경우

     

    1-4) 404 Not Found

    요청 리소스를 찾을 수 없음, 서버에 없음

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

     

    2) 5xx Server Error

    서버 문제로 오류 발생, 서버에 문제가 있기 때문에 재시도하면 성공할 수 있음(복구 가능)

    5xx 오류는 최대한 안 내는 게 좋다. 심각한 서버 오류에만 사용

     

    2-1) 500 Internal Server Error

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

     

    2-2) 503 Service Unavailable

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

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

    728x90
    댓글