빙응의 공부 블로그
[네트워크]HTTP 상태 코드 본문
📝상태 코드
클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다.
- 100번대 : 요청이 수신되어 처리중
- 200번대: 요청 정상처리
- 300번대 : 리다이렉트
- 400번대 : 클라이언트 오류, 잘못된 문법등으로 서버에서 수행불가
- 500번대: 서버 오류, 서버 내부 문제
📝 200번대 - 성공
클라이언트의 요청을 성공적으로 처리한 것이다.
- 200 OK - 요청 성공
- 201 Created - 요청 성공해서 새로운 리소스가 생성됨
- 202 Accepted - 요청이 접수되었으나 처리가 완료되지 않았음
- 204 No Content - 서버가 요청을 성공적으로 수행했지만, 응답 값을 본문에 보낼 데이터가 없음
- 예) 웹 문서 편집기 save 버튼
- 결과로 아무 내용이 없어도 되기 때문
- 204 메시지로 성공을 인식할 수 있다.
📝300번대 리다이렉트
요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요하다.
리다이렉트
웹 브라우저가 300번 응답 결과에 Location 헤더가 있으면 Location 헤더로 자동으로 이동하게 된다.
위의 사진처럼 응답을 받은 순간 새로운 페이지로 이동한다.
이런 리다이렉트는 3가지 종류가 있다.
영구 리다이렉트
리소스의 URI가 영구적으로 이동하며 원래의 URL을 사용하지 않고, 검색 엔진 등에서도 변경을 인지한다.
- 301 Moved Permanently
- 리다이렉트 시 요청 메서드가 GET으로 변하고, 메시지 헤더가 제거될 수 있다.(데이터가 없음)
위 사진처럼 POST로 들어와도 GET으로 변경되며 메시지헤더가 제거된다.
- 308 Permanently Redirect
- 리다이렉트 시 요청 메서드와 메시지 헤더가 유지된다.
위 사진처럼 POST가 유지되고 메시지 헤더도 유지된다.
그러나 new-event의 경우 메시지의 형태 로직이 바뀔 수 있으므로 그냥 GET을 하자
일시적인 리다이렉트
리소스의 URI가 일시적으로 변경된다.
따라서 검색 엔진 등에서 URL을 변경하면 안된다.
- 302 Found
- 리다이렉트 시 요청 메서드가 GET으로 변하고, 메시지 헤더가 제거될 수 있다.(데이터가 없음)
- 307 Temporary Redirect
- 리다이렉트 시 요청 메서드와 본문 유지
- 303 See Other
- 리다이렉트시 요청 메서드가 GET으로 변경 //302보다 의도가 명확
일시적인 리다이렉트 - PRG 패턴
- POST로 주문 후에 웹 브라우저를 새로고침하면 새로고침으로 재요청이 되어 중복 주문이 될 수 있다.
- 이것을 해결하기 위해 나온 것이 PRG
PRG: Post/Redirect/Get 예시
1. POST로 주문 후에 주문 결과 화면을 GET 메서드로 리다이렉트
2. 새로고침해도 결과 화면을 GET으로 조회한다.
PRG 사용 전
PRG 사용 후
특수 리다이렉트
- 304 Not Modified
- 캐시를 목적으로 사용한다.
- 캐시 유효기간에 대한 검증을 하는 리다이렉트이다.
📝400번대 - 클라이언트 오류
클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수 없는 상태를 말한다.
재시도시 무조건 실패한다.
- 400 Bad Request
- 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 요청 파라미터가 잘못되었거나, API 스펙이 맞지 않을 때이다.
- 401 Unauthorized
- 클라이언트가 해당 리소스에 인증이 필요함
- 인증은 Spring-Security에서 다룰 예정
- 403 Forbidden
- 인증을 하고 권한이 없을 때 발생
- 404 Not Found
- 요청 리소스 찾을 수 없음
📝500번대 - 서버 오류
서버 문제로 오류 발생
- 500 Internal Server Error
- 서버 내부 문제
- 503 Service Unavailable
- 서버가 일시적 과부하 또는 예정된 작업을 잠시 요청을 막아둔다.
✔정리
HTTP 상태 코드
- 100번대 - 요청이 수신되어 처리 중
- 200번대 - 요청 정상 처리
- 200 OK - 요청 성공
- 201 Created - Post 새로운 리소스 생성
- 202 Accepted - 요청 접수는 했으나 처리가 완료 안된 상황
- 204 No content - 서버가 요청은 성공했지만, 응답 데이터 없음
- 300번대 - 라다이렉트
- 영구 리다이렉트
- 301 Moved Permamently
- 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.
- 308 Permamently Redirect
- 리다이렉트 시 요청 메서드와 본문 유지
- 301 Moved Permamently
- 일시적인 리다이렉트
- 302 Found - 리다이렉트 시 요청 메서드가 Get으로 변하고, 본문이 제거될 수 있다.
- 307 Temporaly Redirect - 리다이렉트 시 요청 메서드와 본문 유지
- 303 See Other - 리다이렉트 시 GET으로 변경 - 302보다 명확
- PRG : Post/Redirect/Get
- Post로 주문 후 새로고침으로 인한 중복 주문 문제에 대하 ㄴ해결법
- 기타 리다이렉트
- 304 Not Modified
- 캐시 유효 기간 검증에 사용함
- 304 Not Modified
- 영구 리다이렉트
- 400번대 - 클라이언트 문제
- 400 Bad Request - 요청 파라미터가 잘못되었거나, API 스펙이 맞지 않을 때.
- 401 Unauthorized - 클라이언트가 해당 리소스에 인증이 필요함
- 403 Forbidden - 인증을 하고 권한이 없을 때 발생
- 404 Not Found - 요청 리소스 찾을 수 없음
- 500번대 - 서버 문제
- 500 Internal Server Error - 서버 내부 문제
- 503 Service Unavailable - 서버가 일시적 과부하 또는 예정된 작업을 잠시 요청을 막아둔다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크]HTTP 헤더 - 캐시와 조건부 (1) | 2024.01.04 |
---|---|
[네트워크]HTTP 헤더, 전송 방식, 쿠키 (2) | 2024.01.04 |
[네트워크]HTTP 메소드(중요!) (0) | 2024.01.03 |
[네트워크]HTTP (1) | 2024.01.02 |
[네트워크]URI (1) | 2024.01.01 |