- 상태 코드
클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
1xx : 요청이 수신되어 처리중 (거의 사용x)
2xx
: 요청 정상 처리
3xx
: 추가 조치 필요
4xx
: 클라이언트 오류
5xx
: 서버 오류
→ 모르는 상태 코드가 있어도 대략적으로 어떤 상태(오류)인지 알 수 있음
- 202 Accepted
- 요청이 접수되었으나 처리가 완료되지 않음
- ex) 1시간 뒤에 처리할 배치 프로세스
- 204 No Content
- 요청은 수행했으나 응답으로 보낼 데이터가 없음
- ex) 웹 편집기 save 버튼
요청을 완료하기 위해
유저 에이전트(웹 브라우저)의 추가 조치가 필요
-
응답 메시지의 Location 헤더가 있으면 Location 위치로 자동 이동 (
리다이렉트
) -
리다이렉션
과정 -
종류
영구
리다이렉션- 특정 리소스의 URI가 영구적으로 이동
일시
리다이렉션- 특정 리소스의 URI가 일시적으로 변경
- PRG (Post→Redirect→Get)
특수
리다이렉션- 응답 결과 대신 캐시를 사용
- 기존의 URL 사용x
-
301
Moved Permanently -
308 Permanent Redirect
- 리소스의 URI가 일시적으로 변경되기 때문에 검색 엔진 등에서 URL을 변경하면 안됨
-
302
Found → 가장 많이 사용-
메소드가 GET으로 변경될 수 있음
-
본문이 제거될 수 있음
→ 301과 비슷
-
-
307 Temporary Redirect
-
메소드와 본문 그대로 유지
→ 308과 비슷
-
-
303 See Other
- 메소드가 GET으로 무조건 변함
- 302와 기능은 같음
PRG
(Post, Redirect, Get)
304
Not Modified
- 클라이언트에게 리소스가 수정되지 않았음을 알려줌
- 응답 결과를 사용하지 않고 이미 한번 받아서 저장되어 있는 캐시를 재사용함
- 캐시로 리다이렉트
- 응답 메시지에 바디를 포함하고 있지 않음 (로컬pc에 저장된 캐시를 사용하므로)
- GET, HEAD 요청 시 사용
301, 302, 304 위주로 사용
클라이언트 요청의 잘못된 문법
등의 이유로서버에서 요청을 처리할 수 없는 경우
- 똑같은 요청을 계속 보내도 계속 실패함
- 클라이언트의 잘못된 요청
- 다시 검토하고 보내야함
- 해당 리소스에 대한 인증(authentication)이 필요함
- 인증 (authentication)
- 본인이 누구인지 확인 → 로그인
- 인가 (authorization)
- 특정 리소스에 대한 접근 권한이 있는지 확인
- 인증을 받아야 인가를 받을 수 있음
- 누군지 알아야 권한을 줄 수 있으니까
- 인증 (authentication)
- 의미상 인증이 필요한 것이므로 Unauthentication이 맞음
- 인증은 되었지만 해당 리소스에 대한 인가(authorization)이 필요함
- 서버가 요청을 이해했지만 승인을 거부함
- 요청 리소스가 서버에 없는 경우
- 권한이 없는 클라이언트가 리소스에 접근할 때 해당 리소스를 숨기고 싶은 경우
서버 문제로 인한 오류
(서버 다운, DB 오류 등)
- 클라이언트가 같은 요청을 서버 문제가 해결된 뒤에 보내면 오류가 나지 않음
- 5xx 에러는 진짜 서버에만 문제가 있을 때만 만들어야 함
- 서버 내부 문제
- 애매하면 500 에러
-
서버 과부하 또는 예정된 작업으로 인한 요청 처리 불가
-
Retry-After 헤더에 얼마 뒤에 복구되는지 알려줄 수 있음
→ 대부분 장애는 복구 시간이 예측 안되기 때문에 웬만하면 500 에러를 사용함
- 200 Ok
- 요청(Get 조회) 성공
- 201 Created
- 리소스 생성 성공
- 301 Moved Permanetly(영구) & 302 Found(일시)
- 메소드가 GET으로 변경
- 메시지바디 제거
- 302 → PRG 패턴에 사용
- 304 Not Modified
- 리소스가 수정되지 않음을 알림
- 메시지바디가 없고 캐시를 재사용(캐시로 리다이렉트)
- 400 Bad Request
- 클라이언트의 잘못된 요청
- 404 Not Found
- 리소스가 서버에 없는 경우
- 권한이 없는 클라이언트가 리소스에 접근할 경우
- 500 Internal Server Error
- 서버 내부 에러