Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

가능세계

[Network] HTTP 상태 코드(HTTP Status Code) 정리하기 본문

Blog/Network

[Network] HTTP 상태 코드(HTTP Status Code) 정리하기

cona-tus 2023. 9. 11. 09:29

network-icon

HTTP 상태 코드란 무엇인가요?

HTTP 상태 코드(HTTP Status Code)는 클라이언트에게 HTTP 요청의 처리 상태를 알려주는 서버의 응답(Response) 정보입니다.

 

상태 코드에는 어떤 것들이 있나요?

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



1. 1xx (Informational)

1xx 번대의 상태 코드들은 요청이 수신되어 처리 중이라는 의미입니다.

 

실무에서 잘 사용되지 않기 때문에 깊이 다뤄지는 편은 아닙니다.



2. 2xx (Successful)

2xx 번대의 상태 코드들은 클라이언트의 요청을 성공적으로 처리했다는 의미입니다.

 

2-1. 2xx 주요 상태 코드

  • 200 OK: 요청에 대한 성공
  • 201 Created: 요청에 대한 성공의 결과로 새로운 리소스 생성
  • 202 Accepted: 요청이 접수되었으나 서버가 아직 처리를 완료하지 못한 상태
  • 204 No Content: 요청이 성공했으나 응답 본문에 데이터가 없는 상태

 

- 201 Created

201

클라이언트의 요청을 서버가 정상적으로 처리하여 새로운 리소스가 생성된 상태입니다.

 

응답 헤더에는 생성된 리소스에 대한 참조 URI를 제공합니다.

 

일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다.



3. 3xx (Redirection)

3xx 번대의 상태 코드들은 서버가 클라이언트의 요청을 완료하려면 추가적인 작업이 필요하다는 의미입니다.

 

대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우에 해당합니다.

 

3-1. 3xx 주요 상태 코드

  • 301 Moved Permanently: 요청한 리소스가 변경된 URI에 존재
  • 303 See Other: 요청한 리소스가 임시 주소에 존재
    • 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때
  • 304 Not Modified: 요청한 리소스가 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고
    • ETag와 같은 정보를 활용하여 변경 여부를 확인
  • 307 Temporary Redirect: 요청한 리소스가 다른 URI에 존재
    • 이전 요청과 동일한 메서드를 사용
  • 308 Permanent Redirect: 301과 동일

 

3-2. 리다이렉션이란 무엇을 의미하나요?

리다이렉션이란, 3xx 응답의 결과에 Location 헤더가 있으면, 웹 브라우저가 Location 위치로 자동 이동함을 뜻합니다.

 

즉, 클라이언트가 요청한 URL에 대해 다른 URL을 재(re) 지시하여(direct) 해당 주소로 이동할 수 있는 기능입니다.

 

3-3. 리다이렉션의 종류

  • 영구 리다이렉션(Permanent): 특정 리소스의 URI가 영구적으로 이동
  • 일시 리다이렉션(Temporary): 특정 리소스의 URI가 일시적으로 이동
    • 다른 URI에서 리소스를 찾음
  • 특수 리다이렉션(Special): 캐시를 활용할 것인지에 대한 여부

 

3-4. 영구적인(Permanent) 리다이렉션

Location 헤더가 지정한 URL로 요청된 리소스가 이동한 상태입니다. 기존의 URL을 사용해선 안 되며, 검색 엔진에서도 변경을 인지합니다.

 

- 영구적인 리다이렉션의 종류

301

  • 301: 리다이렉트 시 요청 메서드가 GET으로 바뀌고, 본문이 제거될 수 있음
    • GET, HEAD
  • 308: 리다이렉트 시 요청 메서드와 본문을 유지
    • POST, PUT
    • 실무에서 사용 X

 

3-5. 일시적인(Temporary) 리다이렉션

리소스의 URI가 일시적으로 변경된 것이기 때문에 검색 엔진에서 URL을 변경해선 안 됩니다.

 

- 일시적인 리다이렉션의 종류

  • 302: 리다이렉트 시 요청 메서드가 GET으로 바뀌고 본문이 제거될 수 있음
  • 303: 리다이렉트 시 요청 메서드가 GET으로 바뀌고 본문을 제거
    • 302와 달리 변경 및 제거 행위를 무조건적으로 보장
  • 307: 리다이렉트 시 요청 메서드와 본문을 유지

 

- 일시적인 리다이렉션의 예시

prg

 

일시적인 리다이렉션의 예시로는 PRG 패턴을 살펴볼 수 있습니다.

PRG 패턴이란, 일시적인 리다이렉션에서 중복 요청의 전송을 방지하기 위해 사용되는 HTTP 패턴입니다.

 

POST로 주문 후, 주문 결과 화면을 GET 메서드로 리다이렉트 하여 새로고침으로 인한 중복 주문을 방지하는 예시를 찾아볼 수 있습니다.

 

3-6. 특수(Special) 리다이렉션

- 304 Not Modified

304 상태 코드는 캐시를 목적으로 사용됩니다. 수정되지 않은 최신 리소스이므로 클라이언트에게 캐시 이용을 권고하는 것을 의미합니다.

 

클라이언트는 로컬 PC에 저장된 캐시를 재사용하므로, 캐시로 리다이렉트 하는 것이라 할 수 있습니다.

 

클라이언트가 로컬 캐시에서 리소스를 가져오는 것이 명확하기 때문에 응답에 메시지 바디를 포함하지 않아야 합니다.

 

주로 GET, HEAD 요청 시 사용합니다.



4. 4xx (Client Error)

4xx 번대의 상태 코드들은 클라이언트 오류를 의미합니다. 잘못된 문법 등의 오류로 인해 서버가 요청을 수행할 수 없고, 그 원인이 클라이언트에게 있는 상태입니다.

 

이미 잘못된 요청을 하기 때문에 재시도는 실패하게 됩니다.

 

4-1. 4xx 주요 상태 코드

  • 400 Bad Request: 잘못된 요청으로 서버가 처리할 수 없음
  • 401 Unauthorized: 비인증. 해당 리소스에 대한 인증이 없어 접근할 수 없음
  • 403 Forbidden: 미승인. 해당 리소스에 대해 권한이 불충분하여 승인 거부
  • 404 Not Found: 요청 리소스를 찾을 수 없음

 

- 400 Bad Request

클라이언트의 잘못된 요청으로 서버가 처리할 수 없는 상태를 의미합니다. 주로 요청 구문 또는 메시지 문법 오류, 잘못된 요청 파라미터, API 스펙 오류인 경우에 해당합니다.

 

이를 해결하기 위해서는 클라이언트가 자신의 요청 내용을 검토하여 메시지를 재전송해야 합니다.

 

- 401 Unauthorized

비인증을 의미합니다. 인증되지 않은 상태로, 클라이언트가 해당 리소스에 대한 인증이 필요하다는 뜻입니다.

 

예를 들어 로그인하지 않아 해당 서비스를 이용하지 못하는 것으로 생각할 수 있습니다.

 

401 오류 시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명해줘야 합니다.

 

- 403 Forbidden

서버가 요청을 이해했지만 승인을 거부한 상태입니다. 인증 자격은 증명이 되었으나, 접근 권한이 불충분한 경우입니다.

 

예를 들어, 로그인한 상태의 일반 사용자가 어드민 등급의 리소스에 접근하는 경우를 생각해 볼 수 있습니다.

 

- 404 Not Found

클라이언트가 요청한 리소스가 서버에 존재하지 않는 상태입니다.

 

유효하지 않은 URL 요청, 권한이 없는 리소스에 접근하거나, 인증받지 않은 클라이언트로부터 해당 리소스를 숨기고 싶을 때에 해당합니다.



5. 5xx (Server Error)

5xx 번대의 상태 코드들은 서버 오류를 의미합니다. 클라이언트의 유효한 요청을 서버가 처리하지 못했음을 나타냅니다.

 

서버 복구를 통해 요청이 성공할 가능성이 있습니다.

 

5-1. 5xx 주요 상태 코드

  • 500 Internal Server Error: 예상치 못한 서버 내부 문제로 오류 발생
  • 503 Service Unavailable: 일시적으로 서비스 이용 불가

 

- 503 Service Unavailable

서버가 일시적으로 요청을 처리할 수 없을 때 응답됩니다.

 

일반적인 원인은 유지보수(패치 및 업데이트)를 위해 작동이 중단되거나 트래픽 급증으로 과부하가 걸렸을 때입니다.

Retry-After 헤더를 응답에 포함시켜 얼마 뒤에 복구되는지에 대한 안내를 클라이언트에게 해줄 수 있습니다.




참고