728x90
상태코드
클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
- 1xx (Informational): 요청이 수신되어 처리중
- 2xx (Successful): 요청 정상 처리
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 (리다이렉션)
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
2XX
클라이언트의 요청을 성공적으로 처리
- 200 : OK, 요청 성공
- 201 : Created, 요청 성공해서 새로운 리소스 생성 (POST 명령)
- 생성된 리소스는 응답의 Location 헤더 필드로 식별
- 202 : Accepted, 요청이 접수되었으나 처리가 완료되지 않았음
- 배치 처리 같은 곳에서 사용: 요청 접수 후, 특정 시간 후에 배치 프로세스가 요청 처리
- 204 : No Content, 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
- ex) 웹 문서 편집기에서 save 버튼
- save 버튼의 결과로 아무 내용이 없어도 된다. (같은 화면 유지)
- 결과 내용이 없어도 204 메시지만으로 성공 인식
- ex) 웹 문서 편집기에서 save 버튼
3XX
리다이렉션, 요청을 완료하기 위해 User-Agent(클라이언트)의 추가 조치 필요
- 300 : Multiple Choices
- 301 : Moved Permanently (영구 리다이렉션)
- 302 : Found (일시 리다이렉션)
- 303 : See Other (일시 리다이렉션)
- 304 : Not Modified (특수 리다이렉션)
- 307 : Temporary Redirect (일시 리다이렉션)
- 308 : Permanent Redirect (영구 리다이렉션)
리다이렉션의 이해
웹 브라우저는 3XX 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
영구 리다이렉션: 301, 308
- 특정 리소스의 URI가 영구적으로 이동 (위 그림 - 검색 엔진 등에서도 변경 인지, 원래 URL 사용 X)
- 301 Moved Permanently: 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음 (must X, may O)
- 308 Permanent Redirect: 301과 기능은 같지만, 리다이렉트시 요청 메서드와 본문 유지 (처음 POST를 보내면 리다이렉트도 POST 유지)
일시 리다이렉션: 302, 307, 303
- 일시적인 변경 (따라서 검색 엔진 등에서 URL 변경하면 안 됨)
- 주문 완료 후 주문 내역 화면으로 이동
- PRG: Post/Redirect/Get
- POST로 주문 후에 웹 브라우저를 새로고침 하면? 새로고침으로 인해 POST 요청을 다시 하게 되어 중복 주문 발생 가능
- 이를 방지하기 위해 GET 메서드로 리다이렉트 하도록 함
- 즉, 새로고침해도 결과 화면을 GET으로 조회하도록 하는 상태코드
- 302 Found: 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음 (may)
- 307 Temporary Redirect: 리다이렉트시 요청 메서드와 본문 유지 (요청 메서드를 변경하면 안 된다. MUST NOT)
- 307은 Method와 Body가 변경되지 않고 리다이렉트 요청을 하도록 보장되지만, 302는 아니다.
- 303 See Other: 리다이렉트시 요청 메서드가 GET으로 변경
특수 리다이렉션: 304
- 결과 대신 캐시 사용
- 304 Not Modified
- 캐시를 목적으로 사용
- 클라이언트에게 리소스가 수정되지 않았으니, 클라이언트에게 로컬 PC에 저장된 캐시를 재사용하라는 의미 (캐시로 리다이렉트)
- 응답에 메시지 바디를 포함하면 안 된다. (로컬 캐시를 사용해야 하므로)
- 조건부 GET, HEAD 요청 시 사용
4XX
클라이언트의 오류
- 클라이언트의 요청에 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
- 오류의 원인이 클라이언트에 있음
- 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에, 똑같은 재시도가 실패함
종류
- 400 : Bad Request, 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 요청 구문, API 스펙 오류
- 클라이언트는 요청 내용을 다시 검토하고, 보내야 함
- 401 : Unauthorized, 클라이언트가 해당 리소스에 대한 인증이 필요
- 인증(Authentication) 되지 않음 (이름은 Unauthorized이지만 인증과 관련된 코드!)
- 401 오류 발생 시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명
- 403 : Forbidden, 서버가 요청을 이해했지만 승인을 거부함
- 주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우 (인가 - Authorization 문제)
- 404 : Not Found, 요청 리소스를 찾을 수 없음
- 요청 리소스가 서버에 없거나 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 경우
5XX
서버 오류
- 서버 문제로 오류 발생
- 서버에 문제가 있으므로 재시도하면 성공할 수도 있다. (복구가 될 경우)
종류
- 500 : Internal Server Error, 서버 문제로 오류 발생 (애매하면 500!!)
- 503 : Service Unavailable, 서비스 이용 불가
- 서버가 일시적 과부하 혹은 예정된 작업으로 잠시 요청 처리 불가
- Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수 있다.
[참고자료]
What's the difference between HTTP 301 and 308 status codes? - Stack Overflow
김영한, "모든 개발자를 위한 HTTP 웹 기본 지식", 인프런
728x90
반응형
'Web Infra' 카테고리의 다른 글
Cookie (쿠키) (0) | 2023.12.10 |
---|---|
HTTP 헤더 정보 (1) | 2023.12.10 |
HTTP 헤더 (0) | 2023.12.10 |
HTTP 메서드 (1) | 2023.12.07 |
인터넷 프로토콜과 HTTP 개요 (0) | 2023.12.07 |