ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (HTTP) 14 - HTTP 상태 코드 (2xx, 3xx, 4xx, 5xx)
    개발/HTTP 2024. 11. 1. 10:14

     

     

    ■ 2xx 성공 코드

     

    200 : 요청에 대한 성공 

     

     

    201 : 요청 성공해서 새로운 리소스 생성

     

    서버에서 신규 리소스 URI 만들고,

    응답의 Location 에 새롭게 생긴 리소스 경로 넣어준다. 

     

     

    202 : 요청이 접수되었으나 처리가 완료되지 않음 (잘 사용은 안함)

    배치 처리 같은 곳에서 사용

    ex) 요청 접수 후 1시간 뒤에 배치 프로세스가 요청 처리

     

     

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

     

    ex) 웹 문서 편집기에서 save 버튼 

    save 버튼 결과로 아무 내용 없어도 된다.

    save 버튼 눌러도 같은 화면 유지해야 한다.

    결과 내용이 없어도 204 메시지(2xx) 만으로 성공 인식할 수 있다. 

     

    ■ 3xx 리다이렉션

     

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

     

    ※ 리다이렉션이란?

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

     

     

    만약 이전에 사용하던 URL 이 바뀌면 이전 URL 을 요청을 한 클라이언트는

    Location 에 새로 바뀐 경로를 응답받게 된다.

     

    이렇게 되면 웹 브라우저는 3xx 시리즈와 Location 헤더 필드가 있으면

    URL 창에 해당 Location 으로 바꾸고 다시 서버에 요청하게 된다.

     

    따라서 다시 요청을 받고 성공하게 되면 새로운 이벤트 페이지를 열어주게 된다. 

     

     

    리다익션은 3가지가 있다.

     

    1. 영구 리다이렉션 : 특정 리소스 URI 영구적으로 이동

    ex) /members -> /users

    ex) /event -> /new-event

     

    2. 일시 리다이렉션 : 일시적으로 잠깐 변경

    - 주문 완료 후 주문 내역 화면으로 변경

    - PRG : Post / Rediret / Get

     

    3. 특수 리다이렉션

    - 클라이언트 캐시 기간 만료돼서 클라이언트가 서버에 캐시 만료에 대한 정보 넘기면

    서버가 다시 캐시 사용해도 된다는 응답을 보내는 것. (결과 대신 캐시를 사용해라)

     

     

    * 301 Moved Permanently

     

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

    - 메시지 바디 부분이 사라져서 다시 입력해야 함

     

    * 308 Permanent Redirect

     

    - 301 기능 동일

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

    - 실무에서는 거의 사용 안함(내부적으로 전달해야 하는 데이터가 달라지기 때문이다.)

     

     

    리소스가 URI 가 일시적으로 변경된 것이여서 검색 엔진 등에서 URI 변경하면 안된다.

     

    * 302 Found

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

     

    * 307 Temporary Redirect

    - 302 와 기능은 같음

    - 리다이렉트시 요청 메서드와 본문 유지(요청 메시드 변경하면 안됨. MUST NOT)

     

    * 303 See Other

    - 302 와 기능은 같음

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

    - 302 는 GET 으로 변할 수도 있고 아닐 수도 있기 때문에 확실한 303 이 있다.

     

    주문 요청 후 웹 브라우저 새로고침하면 다시 요청이 들어가

    중복 주문이 들어가는 오류가 생길 수 있다. 

     

     

     

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

    마지막 요청이 GET 으로 바뀌기 때문에 새로고침해도 결과 화면을 GET 으로 조회하게 된다.

    중복 주문 대신 결과 화면만 GET 으로 다시 요청하게 되는 것이다. 

     

     

    사진처럼 주문 후 응답을 302 로 하게 되면 3xx 코드와 Location 경로가 있으면 

    자동으로 결과 화면으로 리다이렉트 하게 되고,

    GET 으로 요청하게 되어 새로고침해도 계속 결과화면만 보여주게 된다. 

     

     

    클라이언트 단에서도 한 번 더 막아주는 것이다. 

     

    현실적으로 302 로 많이 사용한다.

    자동 리다이렉션 시 GET 으로 변해도 되면 302 사용해도 문제 없다. 

     

    * 기타 리다이렉션

     

    * 304 Not Modified

    - 캐시 목적으로 사용

    - 클라이언트에게 리소스가 수정되지 않았음을 알려줌.

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

    - 304 응답은 응답에 메시지 바디 포함하면 안된다. (로컬 캐시 사용해야 함으로)

    - 조건부 GET, HEAD 요청 시 사용

     

    ■ 4xx 클라이언트 오류

     

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

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

    - 요청 자체가 잘못됐기 때문에 수정해서 보내야 함

     

    * 400 Bad Request 

     

    클라이언트가 잘못된 요청으로 서버가 요청 처리를 할 수 없음

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

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

     

    * 401 Unauthorized

     

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

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

     

    ※ 참고

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

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

    - 오류 메시지가 Unauthorized 으로 401 오류가 인가가 없음으로 돼 있어 이름이 아쉽지만

    뜻은 인증이 없어 인증이 필요하다는 것이다. 

     

    * 403 Forbidden

     

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

     

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

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

     

    * 404 Not Found

     

    요청 리소스를 찾을 수 없음

     

    - 요청 리소스가 서버에 없음 (URL 오류로 검색)

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

    -> 권한이 부족한 페이지에 접근했으나 클라이언트에게 그 페이지 자체를 보여주고 싶지 않을 때 404 로 내보낼 수 있음

     

    ■ 5xx 서버 오류 

    - 서버 문제로 오류 발생

    - 서버에 문제가 있기 때문에 재시도 하면 성공할 수 있음 (서버 복구 등)

    - 웬만하면 500 에러 내면 안된다. (진짜 서버에 문제가 있을 때만 해야 함)

    - 쿼리 문제, NullPointException 

     

    * 500 Internal Server Error

     

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

     

    * 503 Service Unavailable

     

    서비스 이용 불가

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

    - 일시적으로 서버 다운 (서버 점검)

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

     

    https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

     

    모든 개발자를 위한 HTTP 웹 기본 지식 강의 | 김영한 - 인프런

    김영한 | 실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연

    www.inflearn.com

     

Designed by Tistory.