Network Basis
[Network] HTTP 응답코드(Response Code)
DevPing9_
2022. 4. 8. 00:32
HTTP 상태코드 개요
1xx - Informational : 요청이 수신되어 처리 중 (거의안씀)
2xx - Successful : 요청 정상처리
3xx - Redirection : 요청을 완료하려면 추가 행동 필요
4xx - Client Error : 클라이언트 오류
5xx - Server Error : 서버 오류
'599', '279' 같은 새로운 상태코드가 정의되어 응답이 내려오면
클라이언트는 자신이 그 코드처리방법을 모른다면
상위 상태코드로 해석해서 처리한다.
ex) 279 -> 200 (Successful)
ex) 599 -> 500 (Server Error)
Response Code - 2xx (200번대)
200 OK - 요청성공
201 Created - 요청 성공 & 새로운 리소스 생성됨
202 Accepted - 요청이 접수되었으나 처리가 완료되지 않음
ex) 요청접수 후 1시간 뒤에 배치 프로세스가 요청처리 함
204 No Content - 요청 성공 & 응답페이로드 본문에 보낼 데이터가 없음
ex) 웹 문서 편집기에서의 save 버튼
Response Code - 3xx (300번대)
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
307 Temporray Redirect
308 Permanent Rediret
리다이렉션(Redirection)
웹 브라우저는 3xx 응답 결과에 Location 헤더가 있으면, Location 위치로 자동 리다이렉트 됨.
영구 리다이렉션 (301, 308)
리소스 URI가 영구적으로 이동
기존의 URL로 접근시 리다이렉트 됨
기존의 URI를 사용하지 않고, 검색 엔진 등에서도 변경 인지
[301 Moved Permanently]
리다이렉트 시 요청 메서드가 GET으로 변하고 BODY가 제거됨
(브라우저에 따라 BODY가 제거되지 않을 수 있으나, 현재는 대부분 제거 되는식으로 동작)
[308 Permanent Redirect]
리다이렉트 시 요청 메서드와 BODY를 동일하게 전달 됨
(새로운 URI로 변경될 시, 필요한 BODY내용도 달라질 수 있으므로 301을 쓰는게 안전하다.)
일시적 리다이렉션 (302, 307, 303)
리소스 URI가 일시적으로 변경
검색엔진 등에서 URL을 변경하면 안됨
[302 Found]
리다이렉트 시 요청 메서드가 GET으로 변하고, BODY가 제거됨
(301과 같음, 브라우저마다 상이할 수 있음)
[307 Temporary Redirect]
리다이렉트 시 요청 메서드와 BODY를 유지 (MUST)
[303 See Other]
리다이렉트 시 요청메서드가 GET으로 변경
> 302가 BODY를 제거 안하거나 요청메서드 변경이 안일어나게 끔
구현된 브라우저가 있을 수도 있으므로
명확하게 하자는 취지에서 나온 응답코드
(302와 같다고 봐도 무방)
PRG(Post/Redirect/Get)
Post 요청 후에 리다이렉션 기능으로 화면을 GET 하여 옮기자! 라는 의미
아래는 PRG를 적용하지 않았을 때 생길 수 있는 예시이다.
1. PRG 기법 사용 전
2. PRG 기법 사용 후
PRG는 클라이언트 측에서 해당현상을 방어하는 방법이다.
물론 서버측에서도 PRG기법이 적용되지 않았을 때에 대해 방어를 해야한다.
캐쉬 검증 리다이렉션 (304)
[304 Not Modified]
클라이언트에게 리소스가 수정되지 않았음을 알려준다.
해당 응답코드가 내려오면 클라이언트는 로컬 PC에 저장된 캐시를 사용한다.
따라서 304 응답은 메세지 바디를 포함하지 않는다.
Response Code - 4xx (400번대)
오류의 원인이 클라이언트에 있음.
따라서 똑같은 시도를 아무리해도 평생 실패함
(복구 불가능)
400 Bad Request - 요청 구문, 바디 등의 오류
ex) 파라미터가 잘못됬거나, API스펙이 맞지 않을 때
401 Unauthorized - 인증되지 않음
> 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증방법을 설명
403 Forbideen - 인가되지 않음
404 Not Found - 요청 리소스가 서버에 없음
> 원인이 403 이더라도, 숨기고 싶을 때 404로 내려주기도 함
Response Code - 5xx (500번대)
오류의 원인이 서버에 있음.
따라서 똑같은 시도를 계속하면 성공할 수도 있음
(복구 가능)
500 Internal Server Error - 서버 내부 문제
> Null Point Exception 등 대부분
503 Service Unavailable - 서비스 이용 불가
> 서버가 일시적 과부하 또는 예정된 작업으로 잠시 요청 처리 불가
> Retry-After 헤더로 얼마뒤에 복구되는지 보낼 수도 있음
500 에러는 서버에 진짜 문제가 있을 때 내려주어야 함.
쉽게 정의해서 내려주면 안됨.
응답코드 정의는 왠만하면 200,300,400 에서 해결해야 함.
ex) 연령제한 컨텐츠에 접근 -> 403 에러 (500 ㄴㄴ)
# Reference
1. 김영한님의 '모든 개발자를 위한 HTTP 웹 기본 지식'
728x90