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 위치로 자동 리다이렉트 됨.

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

영구 리다이렉션 (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 기법 사용 전

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

2. PRG 기법 사용 후

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

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