♪ 학습 내용
각 번호대의 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
-> 오류가 줄어든다.
* 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 헤더
'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 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!