HTTP 상태코드에 대해서 배워보자.
- 상태 코드
상태코드는 서버에서 클라이언트에게 보내며, 클라이언트가 보낸 요청에 대한 응답의 상태를 알려준다.
- 1XX (Informational) : 요청이 수신되어 처리 중인 상태
- 2XX (Successful) : 요청 정상 처리 상태
- 3XX (Redirection) : 요청을 완료하려면 추가 행동이 필요한 상태
- 4XX (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없는 상태
- 5XX (Server Error) : 서버 오류, 서버가 요청을 처리하지 못하는 상태
1XX (Informational)
요청이 수신되어 현재 처리 중인 상태로, 현재는 거의 사용하지 않는다고 한다.
2XX (Successful)
클라이언트의 요청을 정상적으로 처리한 상태이다.
- 200 OK
가장 평범한, 요청 성공이다.
- 201 Created
요청에 성공해서 새로운 리소스가 생성이 된다.
- 202 Accepted
요청은 접수 되었으나, 처리가 완료되지 않은 상태이다.
- 204 No Content
서버가 요청을 정상적으로 수행했지만, 응답으로 보낼 데이터는 없다.
버튼을 눌러도 같은 화면을 유지해야 하는 상황에서 사용하며, 결과 내용이 없어도 204만으로도 성공을 인식할 수 있다.
3XX (Redirection)
요청을 완료하기 위해 추가적인 조치가 필요한 상태이다.
웹 브라우저는 3XX 응답의 결과에 Location 헤더가 있으면, 그 위치로 자동 이동한다.
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
- 308 Permanent Redirect
일단 흐름을 이해하면 이렇게 된다.
Location에 있는 페이지로 이동한다.
리다이렉션의 종류에는
- 영구 리다이렉션 (301, 308)
특정 리소스의 URI가 영구적으로 이동했을 때
원래의 URL을 사용하지 않으며, 검색 엔진 등에서도 변경을 인지한다.
301은 Moved Permanently로 리다이렉트 요청 메서드가 GET으로 변하고, 바디 부분이 제거될 수 있다.
308은 Permanent Redirt로 리다이렉트시 요청 메서도와 본문이 유지된다.
- 일시 리다이렉션 (302, 307, 303)
리소스의 URI가 일시적으로 변경된 상태이다.
302는 Found로 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.
307는 Temporary Redirect로 리다이렉트시 요청 메서드와 본문을 유지한다.
303은 See Other로 리다이렉트시 요청 메서드가 GET으로 변경
만약 POST 방식으로 결제를 한 후 웹 브라우저를 새로고침하면 중복 주문이 되는 문제가 생길 수 있다.
이렇게 DB에 주문데이터가 중복으로 2개 들어간다.
이 문제를 해결하기 위해서 POST로 결재 후에 결재 화면을 GET 메서드로 리다이렉트한다.
그러면 POST로 가지 않기 때문에 중복 결재가 되는 일이 없어진다. (조회만 하기 때문에)
- 특수 리다이렉션
304는 Not Modified로 캐시 목적으로 사용한다.
클라이언트에게 리소스가 수정되지 않았음을 알려, 로컬에 저장된 캐시를 재사용하게 한다.
4XX (Client Error)
클라이언트 요청에 따라 잘못된 문법등으로 서버가 요청을 수행할 수 없는 상태이다.
오류의 원인이 클라이언트에 있을 때 4XX 오류가 발생한다.
400은 Bad Request로 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없을 때이다.
401은 Unauthorized로 클라이언트가 해당 리소스에 대한 인증이 필요한 상태이다.
403은 Forbidden로 서버가 요청을 이해했지만 승인을 거부한 상태이다.
404은 Not Found로 요청 리소스를 찾을 수 없는 상태이다.
5XX (Servor Error)
서버 문제로 오류가 발생한 모든 경우이다.
의도적으로 만드는 페이지는 아닐 것이다.