ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7. HTTP 상태코드
    HTTP 2022. 7. 28. 22:33

    클라이언트에서 서버로 요청을 보냈을 때, Response Message에 포함되는 상태코드를 알아보자.

    세세한 상태코드를 알지 못하더라도, 큰 범위의 상태코드를 통해 어림잡아 알 수 있다. 

    따라서, 클라이언트에서는 상위 상태코드로 해석하여 처리하면 된다.


    HTTP 상태코드

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

     

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

    거의 사용되지 않으므로 생략

    ● 2xx - 요청 정상 처리 (성공)

     - 200 OK

    클라이언트의 요청이 정상적으로 처리 되었을 때의 상태 코드이다. (단순 GET 메서드를 통한 조회 등)

     - 201 Created

    일반적으로, POST 메서드를 통해 Resource가 생성되었을 때의 상태이다.

    POST 메서드의 경우, Resource의 URI를 생성해주며, Location 헤더 필드가 추가된다.

     - 202 Accepted

    요청이 접수되었으나, 아직 처리가 완료되지 않았을 경우의 상태이다. (잘 사용되지 않음)

     - 204 No Content

    서버가 요청을 성공적으로 수행했지만, 응답 메세지의 Message Body에 보낼 데이터가 없는 상태이다.

    ● 3xx - 요청을 완료하기 위해 추가 조치 필요 (Redirection)

    우선, Redirection에 대한 이해가 필요하다.

    간단히 설명하자면, 웹 브라우저에서 3xx 상태의 Response Message에 Location 헤더가 있으면, 해당 Location으로 자동 이동 시켜주는 것을 말한다.

    예를 들어, 웹 사이트에 접속하였을때(구 버전) 해당 URL에 변경이 있는 경우, 새로운 URL로 자동으로 Redirect 해준다.

    Redirection의 종류

    1. 영구 Redirection - 특정 Resource의 URI가 영구적으로 이동

    ex) 변경된 웹 사이트 URL

    - 301 Moved Permanently

    Redirect시, 요청 메서드가 GET으로 변하고 본문이 제거될 수도 있다. (항상 제거되는 것은 아님)

    만약, POST 메서드 동작을 시도하였을 때, 301 Redirection이 발생하면 특정 URL로 이동 되면서, 해당 동작이 사라진다.

    즉, 다시 POST 메서드 동작을 수행해야 한다.

    - 308 Permanent Redirect

    Redirect시, 요청 메서드와 본문을 그대로 유지해준다.

    301 상태 코드와 다르게, 동일한 동작을 다시 할 필요가 없다.

     

    2. 일시 Redirection - 특정 작업이 끝난 후, 일시적으로 이동

    Resource의 URI가 일시적으로 변경되는 것으로, 검색 엔진 등에서 URL을 변경하면 안 된다.

    ex) 구매 완료 후, 주문 상세페이지로 이동

    - 302 Found

    Redirect시 요청 메서드가 GET으로 변하고 본문이 제거될 수도 있다. (항상 제거되는 것은 아님)

    - 307 Temporary Redirect

    Redirect시, 요청 메서드와 본문을 그대로 유지해준다.

    302 상태 코드와 다르게, 요청 메서드를 절대 변경하면 안 된다.

    - 303 See Other

    Redirect시, 요청 메서드가 GET으로 변경된다.

     

    쇼핑몰에서 옷을 구매하였다고 가정해보자. 그럼 이 과정에서 POST 메서드가 호출 됐을 것이다.

    이 때, 새로고침을 하게 되면 중복된 POST 메서드가 호출될 것이다.

    분명 나는 한 번의 주문을 원했는데 여러번의 주문이 들어갈 수 있다.

    이를 해결하기 위해 PRG(POST / REDIRECT / GET)을 기억하자 !

    POST로 주문 후에, 주문 결과 화면을 GET 메서드로 Redirect하는 것이다. (302 or 303 Redirect)

    이렇게 되면, 새로고침을 해도 결과 화면이 GET 메서드로 호출 된다.

     

    3. 특수 Redirection - 결과 대신 캐시를 사용

    - 304 Not Modified

    캐시를 목적으로 사용하는 것으로써, 클라이언트에게 Resource가 수정되지 않았음을 알려준다.

    죽, 로컬 PC에 저장된 캐시를 재사용한다. (Redirect)

    304 응답은 Message Body를 포함하면 안 된다. (로컬 캐시를 사용하므로)

    조건부 GET, HEAD 요청시에 사용한다.

    ● 4xx - 클라이언트 오류 (Client Error)

    클라이언트가 요청할 때, 잘못된 문법 등으로 인해 서버가 요청을 수행할 수 없는 경우를 말한다.

    오류의 원인이 클라이언트에 있기 때문에, 똑같은 재시도가 실패한다.

    - 400 Bad Request

    클라이언트가 보낸 요청의 구문, 메세지 등이 오류인 경우의 상태이다.

    클라이언트에서 해당 내용을 다시 검토하고 요청해야한다.

    ex) 요청 Parameter가 잘못되거나, API 스펙이 올바르지 않은 경우

    - 401 Unauthorized

    클라이언트가 해당 Resource에 대한 인증이 되지 않아, 인증이 필요한 경우를 말한다. (로그인이 안 됐다)

    - 403 Forbidden

    클라이언트가 해당 Resource에 대한 인증은 되었지만, 접근 권한이 불충분하여 거부한 경우를 말한다.

    - 404 Not Found

    요청 Resource를 찾을 수 없는 경우를 말한다.

    클라이언트가 요청한 Resource가 서버에 존재하지 않거나, 권한이 부족한 Resource에 접근하려는 경우에도 사용한다.

    ● 5xx - 서버 오류 (Server Error)

    서버 문제로인해 오류가 발생한 경우를 말한다.

    클라이언트에서 동일한 요청을 보내더라도, 시간에 따라 정상 처리될 가능성이 있다.

    - 500 Internal Server Error

    서버 내부 문제로 발생한 오류인 경우를 말한다. (애매한 경우 대부분 500)

    - 503 Service Unavailable

    서버가 일시적인 과부하 및 Update와 같은 작업으로 인해 잠시 요청을 처리할 수 없는 경우를 말한다.

    Retry-After 헤더에 복구 예정 시간을 포함해서 보낼 수도 있다.

     

    서버 오류는 정말 심각한 경우 발생한다.

    따라서, 가능한 예외처리는 클라이언트 오류로 처리해야한다 !

    'HTTP' 카테고리의 다른 글

    9. HTTP 헤더 (2)  (0) 2022.08.01
    8. HTTP 헤더 (1)  (0) 2022.08.01
    6. HTTP 메서드 활용 (2)  (0) 2022.07.28
    5. HTTP 메서드 활용 (1)  (0) 2022.07.28
    4. HTTP 메서드  (0) 2022.07.28

    댓글

Designed by Tistory.