새소식

Backend/HTTP

[CS] HTTP 상태 코드

  • -

HTTP 상태코드

HTTP 상태 코드는 서버와 클라이언트 간의 통신 상태를 나타내는 3자리 숫자입니다.

각 상태 코드는 특정한 의미를 가지며, 이를 통해 클라이언트는 요청의 결과나 추가 행동이 필요한지 여부를 알 수 있습니다.

  • 1xx (Informational): 클라이언트의 요청을 수신하여 처리 중임을 나타냅니다. (거의 사용되지 않는다.)
  • 2xx (Successful):  클라이언트의 요청이 성공적으로 처리되었음을 나타냅니다.
  • 3xx (Redirection): 클라이언트가 요청을 완료하기 위해 추가적인 동작(조치)을 수행해야 함을 나타냅니다.
  • 4xx (Client Error): 클라이언트의 잘못된 요청으로 인해 서버가 요청을 처리할 수 없음을 나타냅니다.
  • 5xx (Server Error): 서버의 문제로 인해 요청을 처리할 수 없음을 나타냅니다.

 

모르는 상태 코드는?

클라이언트는 상위 상태코드로 처리하면 됩니다. 
ex) 541 상태 코드가 오면 5xx(Server Error)로 간주하고 처리하면 됩니다. 

 

 

 

2xx (Successful): 성공 응답

 

  • 200 OK: 요청이 성공적으로 처리되었으며, 요청에 대한 응답 데이터가 함께 반환됩니다.
  • 201 Created: 요청이 성공적으로 처리되었으며, 새로운 리소스가 생성되었음을 나타냅니다. 응답에는 생성된 리소스의 URI가 포함될 수 있습니다.
  • 202 Accecpted: 요청이 접수되었으나 처리가 완료되지 않았음을 나타냅니다.  
  • 204 No Content: 요청이 성공적으로 처리되었으나, 반환할 데이터가 없음을 나타냅니다.

 

 

3xx (Redirection): 리다이렉션 응답

웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동합니다. 

 

  • 300 Multiple Choices: 요청한 리소스에 여러 가지 선택 사항이 있으며, 클라이언트가 선택해야 합니다. (거의 사용되고 있지 않습니다.)
  • 301 Moved Permanently: 요청한 리소스가 영구적으로 다른 URI로 이동되었으며, 이후의 모든 요청은 새 URI를 사용해야 합니다. (리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.)
  • 302 Found: 요청한 리소스가 일시적으로 다른 URI에 있으며, 클라이언트는 새 URI로 요청을 리다이렉트해야 하지만 원래 URI를 계속 사용해야 합니다. (리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.)
  • 303 See Other: 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻을 수 있으며, 주로 POST 요청 후에 사용됩니다. 리다이렉트시 요청 메서드가 GET으로 변경됩니다.)
  • 304 Not Modified: 클라이언트가 조건부 요청을 했고 리소스가 수정되지 않았으므로, 클라이언트는 캐시된 버전을 계속 사용할 수 있습니다. (304 응답은 로컬 캐시를 사용해야 하므로 메시지 바디를 포함하면 안됩니다.)
  • 307 Temporary Redirect: 요청한 리소스가 일시적으로 다른 URI에 있으며, 클라이언트는 동일한 HTTP 메서드로 새 URI에 요청을 보내야 합니다. (리다이렉트시 요청 메서드와 본문이 유지됩니다. 변하지 않습니다.)
  • 308 Permanent Redirect: 요청한 리소스가 영구적으로 다른 URI로 이동되었으며(301과 공통점), 클라이언트는 동일한 HTTP 메서드로 새 URI에 요청을 보내야 합니다. (301과 차이점)
참고) 303, 307이 더욱 명확하지만 302가 범용적으로 사용되고 있습니다.
[영구적 리다이렉션] 308 대신 301을 사용하는 경우
URL: /shop 페이지가 URL: /shop-v2로 변경 되었다고 가정하겠습니다. 
보통 업데이트시 클라이언트가 서버에 요청하는 값 역시 변경되는 경우가 많습니다. 
이 경우 301을 사용하면 요청 값 불일치에 대한 고민을 하지 않아도 됩니다.

 

[일시적인 리다이렉션] PRG: Post / Redirect / Get
결제창에서 Post요청으로 결제 이후 새로고침을 하면 다시 결제 요청이 될 수 있습니다. 

PRG 예시 (클라이언트 측)
Post: 결제 요청을 보냅니다.(Post) -> 결제 성공 결과(200)를 받는 대신 302 결과를 받습니다. 이때 결제 정보가 저장된 데이터도 함께 받습니다. 
Redirect: 302 결과로 서버에 GET 요청을 보냅니다. 이 때 전달받은 결제 정보도 함께 보냅니다. 서버는 리다이렉트로 전달받은 결제정보를 통해 결제 정보를 다시 조회합니다. 이후 200을 반환합니다.
Get: 200 결과와 데이터를 수신한 후 결제 완료 화면으로 이동합니다. 이 후 새로고침해도 GET요청을 보내어 결제 완료 화면의 결과가 반환됩니다. 

 

 

 

4xx (Client Error): 클라이언트 오류 응답

  • 400 Bad Request: 잘못된 문법, 구문 등의 이유로 서버가 요청을 이해할 수 없음을 나타냅니다.
  • 401 Unauthorized: 인증이 필요하며, 클라이언트가 인증되지 않았음을 나타냅니다.
  • 403 Forbidden: 클라이언트가 요청한 리소스에 접근할 권한이 없음을 나타냅니다.  ex) 로그인은 했지만, 특정 정보에 접근 권한이 없는 경우
  • 404 Not Found: 요청한 리소스를 찾을 수 없음을 나타냅니다.

 

 

 

5xx (Server Error): 서버 오류 응답

 

  • 500 Internal Server Error: 서버에서 일반적인 오류가 발생하여 요청을 처리할 수 없음을 나타냅니다.
  • 502 Bad Gateway: 서버가 게이트웨이 역할을 하는데, 상위 서버로부터 유효하지 않은 응답을 받았음을 나타냅니다.
  • 503 Service Unavailable: 서버가 일시적으로 과부하 상태이거나 유지 보수 중임을 나타냅니다.

 

4xx 오류는 클라이언트가 잘 못된 형식 또는 값으로 요청을 보내 발생한다. 따라서 재시도 요청을 보내도 결과는 동일하다.
반면 5xx 오류는 서버의 일시적인 오류로 발생할 수 있다. 따라서 재시도 요청시 정상적인 결과를 받을 수도 있다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.