1XX (정보) : 요청을 받았으며 프로세스를 계속한다.
2XX (성공) : 요청을 성공적으로 받았으며 인식했고 수용하였다.
3XX (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
4XX (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
5XX (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.
# 2xx 응답코드
✅ 200 OK
요청이 성공적으로 되었다.
✅ 201 Created
요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었다.
이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라온다.
✅ 202 Accepted
요청을 수신하였지만, 그에 응하여 행동할 수 없다.
다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나
배치 프로세스를 하고 있는 경우를 위해 만들어졌다.
ex) 요청 접수 1시간 뒤에 배치 프로세스가 요청을 처리함
✅ 204 No Content
서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없다.
(요청에 대해서 보내줄 수 있는 컨텐츠는 없지만, 헤더는 의미있을 수 있음)
ex) 웹 문서 편집기 save 버튼
-> save 버튼 결과로 아무 내용이 없어도 된다.
save 버튼을 눌러도 같은 화면을 유지해야 한다.
결과 내용이 없어도 204 메세지(2xx)만으로 성공을 인식할 수 있다.
# 3xx 응답코드
[영구 리다이렉션]
✅ 301 Moved Permanently
이 응답 코드는 요청한 리소스의 URI가 변경되었음을 의미한다.
리다이렉트시 요청 메소드가 GET으로 변하고, 본문이 제거될 수 있다. (MAY)
ex) 클라이언트가 post로 정보를 입력했어도,
변경된 주소로 리다이렉트 되면서 본문 내용이 사라지면
클라이언트는 다시 입력해서 보내야할 수 있다.
✅ 308 Permanent Redirect
301 코드와 동일한 기능, 의미를 가지고 있다.
차이점은 리다이렉트시 요청 메서드와 본문을 유지한다는 점이 다르다.
ex) 처음에 POST로 보냈다면 리다이렉트도 POST로 보낸다.
[일시적인 리다이렉션]
✅ 공통 내용 (302,303,307)
리소스의 URI가 일시적으로 변경되었음을 의미한다.
새롭게 변경된 URI는 나중에 만들어질 수 있으므로
클라이언트는 향후의 요청도 반드시 동일한 URI로 해야한다.
겜색 엔진 등에서 URI를 변경하면 안된다.
✅ 302 Found
리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
-> 명확하지 않다.
✅ 303 See Other
302와 기능은 같다.
클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때,
서버가 클라이언트로 직접 보내는 응답.
리다이렉트시 요청 메서드가 GET으로 변경 (GET으로 명확하게)
✅ 307 Temporary Redirect
302와 기능은 같다.
리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다/ MUST NOT)
[기타 리다이렉션]
✅ 304 Not Modified
이것은 캐시를 목적으로 사용된다.
이것은 클라이언트에게 응답이 수정되지 않았음을 알려주며,
그러므로 클라이언트는 계속해서 응답의 캐시된 버전을 사용할 수 있습니다.
(캐시로 리다이렉트)
304 응답은 로컬 캐시를 사용해야하므로 메시지 바디를 포함하면 안된다.
조건부 GET, HEAD 요청시 사용
# 4xx 응답코드
✅ 400 Bad Request
이 응답은 잘못된 문법으로 인하여 서버가 요청하여 이해할 수 없음을 의미한다.
클라이언트는 요청 내용을 다시 검토하고 보내야한다.
ex) 요청 구문, 메세지 등등 오류/ 요청 파라미터가 잘못되거나,
API 스펙이 맞지 않을 때
✅ 401 Unauthorized
비록 HTTP 표준에서는 '미승인(unauthorized)'이지만
의미상 '비인증(unauthenticated)'를 의미한다.
401 오류 발생 시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명
cf)
인증(Authentication) 본인이 누구인지 (로그인)
인가(Authorization) 권한부여 (ADMIN 권한)
✅ 403 Forbidden
서버가 요청을 이해했지만 승인을 거부, 클라이언트는 컨텐츠에 접근한 권리를
가지고 있지 않다.
주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우 403 에러가 발생한다.
401 에러와 다른 점 : 서버에서 클라이언트가 누구인지 알고 있다.
✅ 404 Not Found
요청 리소스가 서버에 없을 때, 브라우저에서는 알려지지 않은 URL을 의미한다.
또는 인증받지 않은 클라이언트로(권한이 부족한)부터 리소스를 숨기기 위하여
이 응답을 403 에러 대신에 전송할 수도 있다.
웹에서 반복적으로 발생하기 때문에 대표적인 에러
# 5xx 응답코드
✅ 500 Internal Server Error
웹 사이트 서버에 문제가 있음을 의미하지만 서버는 정확한 문제에 대해
구체적으로 설명할 수 없다.
애매하면 500 오류
✅ 503 Service Unavailable
서버가 요청을 처리할 준비가 되지 않았다.
(ex. 유지보수를 위해 작동이 중단되거나 과부하가 걸린 서버)
Retry-After:HTTP 헤더 필드로 서비스를 복구하기 전 예상시간을 보낼 수 있다.
1. 인프런 - HTTP 웹 기본지식 강의 (김영한)
2. 위키백과 - http 응답코드
3. HTTP 상태 코드정리 (와탭 블로그)