녕의 학습 기록

[HTTP] HTTP 상태코드 본문

Dev/HTTP

[HTTP] HTTP 상태코드

kjyyjk 2022. 12. 27. 22:06

 학습 내용 

각 번호대의 HTTP 상태코드 / PRG


* 상태코드란?

 

상태코드는 클라이언트가 서버로 보낸 요청이 어떻게 처리가 되었는지를 서버가 응답해주는 기능.

 

상태코드는 숫자로 이루어져 있고, 각 번호 대마다 의미하는 바가 다르다.

 

* 1XX 대 상태코드

 

1XX대 상태 코드는 클라이언트의 요청이 수신되었고 현재 처리중이라는 의미이다.

실제로는 거의 사용하지 않는 상태코드라고 한다.

 

* 2XX 대 상태코드

 

200번대 상태 코드는 요청이 성공적으로 처리되었음을 의미한다.

 

- 200 OK

단순하게 요청이 성공되었음을 뜻한다.

 

-201 Created

클라이언트의 요청이 POST 같은 메서드인 경우, 요청이 성공하면 서버에서 새로운 리소스가 생성된다.

이때 새로운 리소스 생성의 성공을 의미하고, 응답메시지에 201상태코드와 URI정보를 담아 전달한다.

 

-202 Accepted

클라이언트의 요청 접수 완료. 하지만 아직 처리가 완료 되지 않았다.

서버 입장에서는 아직 처리중인 것이지만, 클라이언트 입장에서는? 접수 되었으니 성공이다.

 

-204 No Content

요청을 성공적으로 수행했지만 응답 메시지 바디에 보낼 데이터는 없을 때.

 

* 3XX 대 상태코드

 

300번대 상태코드는 리다이렉션을 의미한다.

 

Redirection이란 클라이언트의 요청을 완료하기 위해 추가적인 조치가 필요하다는 것이다.

 

300번대 응답 결과에 Location 헤더가 있으면 웹 브라우저가 해당 위치로 자동 이동(Redirect).

 

한 마디로 클라이언트를 다른 경로로 돌려보낸다고 이해하면 쉬울 거 같다.

 

 

리다이렉션에는 3가지 정도 종류가 있다

 

1. 영구적인 리다이렉션

 

클라이언트가 요청한 리소스의 URI가 영구적으로 이동했을 때이다.

 

즉, 기존의 URL을 사용하지 않을 경우.

 

- 301 Moved Permanently

리다이렉트 시에 요청 메서드가 GET 메서드로 변경되고, 본문이 제거될 수 있다.(May)

GET메서드이니 리다이렉트 시 새로운 페이지를 보여주지만, 사용자는 다시 처음부터 정보를 입력해야한다.

 

- 308 Permanent Redirect

301과 비슷하지만 리다이렉트 시 기존의 메서드와 본문이 유지된다.

301에서는 기존 요청 메서드가 POST 였다면 리다이렉트 시 GET.

하지만 308에서는 리다이렉트 시에도 POST로 메서드가 유지된다.

 

 

2. 일시적인 리다이렉션

 

요청한 리소스의 URI가 일시적으로 변경된 경우이다.

 

- 302 Found

리다이렉트 시 요청 메서드가 GET 메서드로 변경되고, 본문이 제거될 수 있다.(May)

 

- 307 Temporary Redirect

302와 기능은 같으나 리다이렉트 시 요청메서드와 본문 유지!

 

- 303 See Other

302와 기능은 같으나 리다이렉트 시 요청 메서드가 무조건!!! GET으로 변경된다.

 

 

 

302 대신 307 303이 나왔지만 리다이렉션 시 GET으로 변경돼도 상관 없으면 302를 사용해도 문제x

 

 

3. 기타 리다이렉션

 

- 303

안쓴다

 

- 304 Not Modified

클라이언트가 요청한 리소스가 수정되지 않았음을 의미.

수정하지 않았으면? 클라이언트는 굳이 서버에서 받지 않고 캐시(cache)를 재사용하면 된다.

-> 캐시로 리다이렉트.

 

 

* PRG(Post - Redirect - Get)

 

주문 시스템을 예로 들면 POST로 주문하고 새로고침하면 중복주문이 될 수도 있다.

 

서버 차원에서도 방지를 해줘야하긴 하지만 클라이언트 차원에서도 방지책이 필요하다.

 

PRG가 바로 그것이다.

 

POST로 주문을 하면 그냥 200OK가 아닌, 300번대 상태코드로 리다이렉트를 한다.

 

어디로? 주문완료 화면으로.

 

이를 위해서는 리다이렉트 시 메서드가 GET으로 변경되어야한다.

 

이렇게 되면 주문 완료 후 아무리 새로고침 해도 주문완료 화면을 GET하는 꼴 밖에 안된다.

 

Post / Redirect / Get

 

-> 오류가 줄어든다.

PRG 이해

 

* 4XX 대 상태코드

 

400번대는 클라이언트의 요청이 잘못 되었음을 뜻한다.

 

클라이언트가 오류의 원인이다.

 

그렇기 때문에 아무리 재시도해도 실패한다.

 

- 400 Bad Request

클라이언트의 잘못된 요청으로 서버가 처리할 수 가 없다.

클라이언트는 검토 후 다시 보내야한다.

 

- 401 Unauthorized

해당 리소스에 접근하기 위한 클라이언트의 인증이 필요하다.

이때는 응답 메시지에 인증 방법을 함께 설명함.

 

- 403 Forbidden

서버가 승인을 거부했을 때이다.

주로 접근 권한이 불충분할 때!

 

- 404 Not Found

요청 리소스가 서버에 없을 때, 또는 서버가 리소스를 숨기고 싶을 때.

 

 

* 5XX 대 상태코드

400번대와는 달리 500번대 상태 코드는 서버의 오류를 뜻한다.

 

서버 문제이기 때문에 재시도 시에 성공할 수 있는 가능성이 있다.

 

- 500 Internal Server Error

서버 내무 문제로 오류가 발생한 경우이다.

그냥 애매하면 500 오류!

 

- 503 Service Unavailable

일시적 과부하 또는 예정된 작업으로 요청 처리 불가한 경우.

 

 

(주의 할 것은 5XX에러는 정말 서버에 문제가 생겼을 때만 사용하는 것을 권장)

 


 다음 학습 내용 

 

HTTP 헤더

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

 

'Dev > HTTP' 카테고리의 다른 글

[HTTP] HTTP 헤더 (2)  (0) 2022.12.29
[HTTP] HTTP 헤더 (1)  (1) 2022.12.29
[HTTP] HTTP 메서드 활용  (0) 2022.12.25
[HTTP] HTTP 메서드  (0) 2022.12.25
[HTTP] HTTP 기본  (0) 2022.12.23