-
HTTP(4) - HTTP 상태코드스프링/HTTP 기본 지식 2023. 2. 6. 21:25
HTTP 상태 코드
1xx : 요청이 수신되어 처리 중
2xx : 요청 정상 처리
3xx : 요청을 완료하려면 추가 행동이 필요
4xx : 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음 (클라이언트 에러)
5xx : 서버 오류, 서버가 정상 요청을 처리하지 못함 (서버 에러)
각각의 특징
1. 1xx : 요청이 수신되어 처리 중
- 거의 사용하지않음
2. 2xx : 클라이언트의 요청을 성공적ㅇ로 처리
- 200 OK - 요청 성공
- 201 Created - 요청 성공해서 새로운 리소스가 생성됨
- 202 Accepted - 요청이 접수되었으나 처리가 완료되지 않았음
- 204 No Content - 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
200이랑 201을 거의 많이 사용함.
3. 3xx : 리다이렉션
- 300 Multipe Choices
- 301 Moved Premanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
- 308 Permanent Redirect
리아이렉트 : 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
URL: /event가 URL: /new-event로 바뀌었다고 가정을 하자.
만약 클라이언트가 이 사실을 인지 못하고
GET /event HTTP/1.1
Host: localhost:8080 을 입력한다면
서버는 다음과 같이 응답한다.
HTTP/1.1 301 Moved Permanently
Location:/ new-event
그러면 자동 리다이렉트로 인하여 event가 아니라 new-event라고 다시 요청하게 된다.
옛날 페이지를 입력했지만 사용자 입장에서는 새로운 페이지를 볼 수 있다.
속도가 빨라서 클라이언트는 잘 인지 못하게 된다.
영구 리다이렉션
301, 308
- 리소스의 URI가 영구적으로 이동
- 원래의 URL를 사용 x, 검색 엔진 등에서도 변경 인지
일시적인 리다이렉션
302, 307, 308
- 리소스의 URI가 일시적으로 변경
302 - 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
307 - 리다이렉트시 요청 메서드와 본문 유지
303 - 리다이렉트시 요청 메서드가 GET으로 변경 (302보다 명확하게 변경됨)
상품을 주문한다고 가정을 했을 때 상품 주문 완료 페이지에서 새로고침을 누르면 상품이 재주문 될 수 있다고 생각해보자.
이러한 것을 방지하기 위해 RPG: Post/Redirect/Get을 사용한다. URL이 POST -> GET으로 리다이렉트 됨
POST/ order HTTP/1.1
Host: localhost:8080
itemId=mouse&count=1
위와 같이 입력을 하면
HTTP/1.1 302 Found
Location:/ order-result/19
라고 주문 완료가 뜬다.
이때, 자동 리다이렉트로 GET으로 변경이 되고, 새로고침을 하면
GET /order-result/19 HTTP/1.1
Host: localhost:8080
이 요청된다.
결국 재주문이 아니라 GET을 통한 완료페이지를 보여주게 된다.
HTTP/1.1 200 OK
<html>주문완료</html>이 응답된다.
4xx : 클라이언트 오류
- 클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 오류의 원인이 클라이언트에 있음
- 클라이언트의 잘못이기에 똑같은 요청을 재시도하면 계속 실패함 -> 복구 불가능
400 - 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 클라이언트는 요청 내용을 다시 검토하고 보내야함, 요청 파라미터나 API 스펙이 맞지 않을 때 발생
401 - 클라이언트가 해당 리소스에 대한 인증이 필요함
- 인증이 되지 않아서 본인이 누구인지 확인하는 인증이 필요함(로그인이 안됨)
403 - 서버가 요청을 이해했지만 승인을 거부함
- 로그인은 됐지만 접근할 수 없을 때
404 Not Found - 요청 리소스를 찾을 수 없음
- 요청 리소스가 서버에 없음
- 또는 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때
5xx : 서버 오류
- 서버에 문제가 있기 때문에 재시도하면 성공할 수도 있음(복구가 되는 경우 등)
500 - 서버 문제로 오류 발생
- 애매하면 전부 500 오류로 내보냄
503 - 서비스 이용 불가
- 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음(일시적인 장애로 인한 서버 오류)
'스프링 > HTTP 기본 지식' 카테고리의 다른 글
HTTP(6) - HTTP 헤더 (정보 및 쿠키) (0) 2023.02.07 HTTP(5) - HTTP 헤더 (표현헤더, 협상, 전송 방식) (0) 2023.02.07 HTTP(3) - API 설계 예 (0) 2023.02.05 HTTP(2) - 클라이언트에서 서버로 데이터 전송 (0) 2023.02.05 HTTP(1) - HTTP 메서드 (0) 2023.02.05