ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP(4) - HTTP 상태코드
    스프링/HTTP 기본 지식 2023. 2. 6. 21:25

    HTTP 상태 코드

    1xx : 요청이 수신되어 처리 중

    2xx : 요청 정상 처리

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

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

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

     

    각각의 특징

     

    1. 1xx : 요청이 수신되어 처리 중

    - 거의 사용하지않음

     

     

    2. 2xx : 클라이언트의 요청을 성공적ㅇ로 처리

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

    200이랑 201을 거의 많이 사용함.

     

     

    3. 3xx : 리다이렉션

    • 300 Multipe Choices
    • 301 Moved Premanently
    • 302 Found
    • 303 See Other
    • 304 Not Modified
    • 307 Temporary Redirect
    • 308 Permanent Redirect

     

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

     

    URL: /event가 URL: /new-event로 바뀌었다고 가정을 하자.

     

    만약 클라이언트가 이 사실을 인지 못하고

    GET /event HTTP/1.1

    Host: localhost:8080 을 입력한다면

     

    서버는 다음과 같이 응답한다.

    HTTP/1.1 301 Moved Permanently

    Location:/ new-event

     

    그러면 자동 리다이렉트로 인하여 event가 아니라 new-event라고 다시 요청하게 된다.

     

    옛날 페이지를 입력했지만 사용자 입장에서는 새로운 페이지를 볼 수 있다.

    속도가 빨라서 클라이언트는 잘 인지 못하게 된다.

     

     

     

    영구 리다이렉션

    301, 308

     

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

    - 원래의 URL를 사용 x, 검색 엔진 등에서도 변경 인지

     

     

     

    일시적인 리다이렉션

    302, 307, 308

     

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

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

    307 - 리다이렉트시 요청 메서드와 본문 유지

    303 - 리다이렉트시 요청 메서드가 GET으로 변경 (302보다 명확하게 변경됨)

     

    상품을 주문한다고 가정을 했을 때 상품 주문 완료 페이지에서 새로고침을 누르면 상품이 재주문 될 수 있다고 생각해보자.

    이러한 것을 방지하기 위해 RPG: Post/Redirect/Get을 사용한다. URL이 POST -> GET으로 리다이렉트 됨

     

    POST/ order HTTP/1.1

    Host: localhost:8080

     

    itemId=mouse&count=1

    위와 같이 입력을 하면

     

    HTTP/1.1 302 Found

    Location:/ order-result/19

    라고 주문 완료가 뜬다.

     

    이때, 자동 리다이렉트로 GET으로 변경이 되고, 새로고침을 하면

    GET /order-result/19 HTTP/1.1

    Host: localhost:8080

    이 요청된다.

     

    결국 재주문이 아니라 GET을 통한 완료페이지를 보여주게 된다.

    HTTP/1.1 200 OK

    <html>주문완료</html>이 응답된다.

     

     

    4xx : 클라이언트 오류

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

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

    - 클라이언트의 잘못이기에 똑같은 요청을 재시도하면 계속 실패함 -> 복구 불가능

     

     

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

    - 클라이언트는 요청 내용을 다시 검토하고 보내야함, 요청 파라미터나 API 스펙이 맞지 않을 때 발생

     

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

    - 인증이 되지 않아서 본인이 누구인지 확인하는 인증이 필요함(로그인이 안됨)

     

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

    - 로그인은 됐지만 접근할 수 없을 때

     

    404 Not Found - 요청 리소스를 찾을 수 없음

    - 요청 리소스가 서버에 없음

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

     

     

    5xx : 서버 오류

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

     

    500 - 서버 문제로 오류 발생

    - 애매하면 전부 500 오류로 내보냄

     

    503 - 서비스 이용 불가

    - 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음(일시적인 장애로 인한 서버 오류)

Designed by Tistory.