Study/Network

[Network] HTTP 상태코드

jonghne 2023. 10. 18. 18:15

HTTP 상태코드

HTTP 상태코드란 클라이언트가 보낸 요청의 처리 상태를 HTTP 응답을 통해 알려주기 위한 코드값이다.

 

1XX (Informational)

요청이 수신되어 처리중 (거의 사용 x)

 

2XX (Successful)

요청이 정상 처리 되었음을 뜻한다. 

 

2XX대의 상태코드는 아래와 같이 여러가지가 있지만 , 주로 200/201을 사용한다

 

 

200 : OK

- 요청이 성공했음

 

201 : CREATED

- 요청이 성공해서 새로운 리소스가 생성되었음

- 응답 메시지의 Location을 통해 리소스를 식별한다.

 

202 : ACCEPTED

- 요청이 접수되었으나 처리가 완료되지 않음 (ex) 배치 돌리는 상황)

 

204 No Content

- 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음 (ex) 웹 문서 편집기에서 save 버튼 누를때)

 

 

 

3XX (Redirection)

요청을 완료하려면 추가 행동이 필요하다는 뜻으로, Location 헤더가 있으면 해당 헤더로 자동으로 이동시킨다. 

 

주로 자원이 이동된 경우 웹 페이지를 이동시키기 위해 사용한다.

 

영구 리다이렉션, 일시 리다이렉션, 특수 리다이렉션 종류가 있고, 그에 따라 상태코드가 나뉜다.

 

📌 영구 리다이렉션

특정 리소스의 URI가 영구적으로 이동한 경우로, 새로운 URI로 처음부터 다시 요청해야 한다. (예) /members → /users)

 

다음과 같은 상태 코드들이 있다.

 

 

301 : Moved Permanently

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

 

308 : Permanent Redirect

- 301과 거의 동일한 기능이지만, 리다이렉트 시 요청 메서드와 본문을 유지한다는 차이가 있다.

- 해당 상태코드는 잘 안쓴다.

 

 

 

📌 일시 리다이렉션 

리소스의 URI가 일시적인 변경 되어 리다이렉션 하는 경우 사용한다.  

 

영구 리다이렉션 보다 자주 사용하고, PRG 패턴에서 사용된다.

(PRG 패턴 : POST 요청 후 GET 요청으로 변경해야 하는 경우에 사용하는 패턴, 예시로 주문완료 후 주문 내역 화면으로 이동하는 경우가 있다)

 

 

302 : Found

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

 

307 : Temporary Redirect

- 302와 기능이 같지만, 리다이렉트 시 요청 메서드와 본문을 유지한다는 차이가 있다

 

303 : See Other

- 302와 기능이 같지만, 리다이렉트 시 요청 메서드가 GET으로 변경된다.

 

 

📌 특수 리다이렉션

서버가 요청을 처리하지 않고, 캐시를 사용하는 경우 쓰는 상태 코드

 

 

304 : Not Modified

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

- 해당 상태 코드를 받은 클라이언트는 로컬 PC에 저장된 캐시를 재사용해서 리다이렉트 한다

- Body를 포함하면 안된다

 

 

 

 

4XX (Client Error)

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

이 경우에는 서버에 같은 요청을 재시도 해도 동일한 오류가 발생한다.

 

 

400 : Bad Request

- 클라이언트가 요청 구문, 메시지 등의 오류로 잘못된 요청을 해서 서버가 처리할 수 없음을 뜻한다.

- 클라이언트는 요청 내용을 다시 검토하고 보내야함 (ex) 요청 파라미터가 잘못되거나 , API 스펙이 맞지 않을 때)

 

401 : Unauthorized

- 클라이언트가 해당 리소스에 대한 인증(Authentication)이 필요함을 뜻한다.

- 주로 로그인 안되어있는데 리소스에 접근하려 할 때 사용한다

- 응답 메시지 헤더에  www-authenticate 헤더와 함께 인증 방법 설명한다. 

 

403 Foribidden

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

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

 

404 Not Found

- 요청 리소스를 찾을 수 없음을 뜻한다. 

- 주로 요청 리소스가 서버에 없거나, 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때 사용한다.

 

 

 

5XX (Server Error)

서버 내부에 오류가 발생해서 정상 처리를 하지 못했음을 의미하는 상태코드이다.  

서버에 문제가 있기 때문에 재시도 시 성공할 수도 있다 (복구가 되거나 등등)

 

실무에서는 5XX 상태 코드가 발생했을 때 대부분 시스템 장애로 판단한다.

그렇기 때문에, 서버 단에서는 비즈니스 로직으로 인한 오류가 5XX 상태 코드를 리턴하지 않도록 잘 처리해야 한다.

 

 

500 : Internal Server Error

- 서버 내부 문제로 오류가 발생했음을 뜻함.  (대부분 서버 오류나면 이 500 에러인 경우가 많음)

 

503 : Service Unavailable

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

- HTTP 헤더에 Retry-After를 추가하여 얼마뒤에 복구되는지 보낼 수 있다.