- HTTP 상태코드
- 클라이언트가 보낸 요청의 처리 상태르르 응답에서 알려주는 기능
- 1XX(Informational) : 요청이 수신되어 처리중(거의 사용하지 않으므로 생략)
- 2XX(Successful) : 요청 정상 처리
- 성공
- 200 : ok : ex. GET 요청이 오면 결과를 정상적으로 처리해서 응답할 경우
- 201 : Created
- ex. POST요청으로 신규자원 생성 요청 -> 서버에서는 신규 리소스를 만들고 응답코드 201로 응답
- 202 : Acceapted
- 요청이 접수는 되었으나 처리는 완료X
- 배치 처리 같은 곳에서 사용.
- 204 : No Content
- 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
- ex. 웹 문서 편집기에서 save 버튼
- save버튼의 결과로 아무 내용이 없어도 됨
- save 버튼을 눌러도 같은 화면 유지
- 결과 내용이 없어도 204 메시지만으로 성공 인식 가능
- 3XX(Redirection) : 요청을 완료하려면 추가 행동(유저 에이전트의 추가 조치)이 필요
- 리다이렉션의 이해
- 웹 브라우저는 3XX 응답의 결과에 Location헤더가 있으면 Location 위치로 이동(리다이렉트)
- ex. 기존 이벤트 페이지에서 새로운 url 이벤트 페이지로 바뀌어서 고객이 요청을 하면 서버가 새로운 위치를 응답으로 전해줄 때 301 사용해서 리다이렉션으로 이동
- 영구 리다이렉션 : 특졍 리소스의 URI가 영구적으로 이동
- 원래 url 사용 x . 검색 엔진 등에서도 변경 인지
- 301 : Moved Pemanently
- 리다이렉트 시 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음(MAY)
- 실무에서는 이걸 많이 사용. 새로운 페이지로 바뀌는 경우 내용이 바뀌는 경우가 많음.
- 308 : Permanent Redirect
- 301과 기능 같음
- 리다이렉스 요청시 요청 메서드와 본문 유지
- 일시 리다이렉션 : 일시적인 변경
- 리소스 URI가 일시적으로 변경. 검색 엔진 등에서 URL변경하면 안 됨
- 302 : Found
- 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문 제거 가능(MAY)
- 307 : Temporary Redirect
- 302와 같은 기능
- 리다이렉트 시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안 됨(MUST NOT))
- 303 : See Other
- 302와 같은 기능
- 리다이렉트시 요청 메서드가 GET으로 ㄹ변경
- 주문 완료 후 주문 내역 화면으로 이동
- PRG : Post/Redirect/Get
- 일시적인 리다이렉션 -예시
- POST로 주문 후 웹 브라우저 새로고침하면 새로고침은 다시 요청이므로 중복 주문이 될 수 있음
- POST주문 후에 새로고침으로 인한 중복 주문 방지
- POST 주문 후에 주문 결과 화면을 GET 메서드로 리다이렉트
- 새로고침 해도 결과 화면을 GET으로 조회
- 중복 주문 대신 결과 화면만 GET으로 다시 요청. 실무에서 많이 사용
- 셋 중에 뭘 써야 하는가?
- 302 GET으로 변할 수 있음 / 307 : 메서드가 변하면 안 됨 / 303 : GET으로 변경
- 현실적으로 303, 307 권장하지만 이미 많이 302 쓰고 있음
- 기타 리다이렉션 300, 304
- 300 : Multiple Choices / 안씀
- 304 : Not modified
- 캐시를 목저긍로 사용
- 클라이언트에게 리소스가 수정되지 않았음을 알려줌, 클라이언트는 로컬PC에 저장된 캐시 재사용(캐시로 리다이렉트)
- 304 응답은 응답에 메시지 바디 포함하면 안 됨(로컬 캐시 사용해야 함)
- 조건부 GET, HEAD 요청 시 사용함
- 리다이렉션의 이해
- 4XX(Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
- 클라이언트 요청에 잘못된 문법 등으로 서버가 요청 수행 불가
- 오류의 원인이 클라이언트, 요청 구문, 메시지 등 오류
- 중요 ! 클라이언트의 잘못이므로 같은 요청을 시도하면 또 실패함
- 클라이언트는 요청 내용 다시 검토하고 실패
- 401 : Unauthorized
- 클라이언트가 해당 리소스에 대한 인증 필요
- 인증 되지 않았다는 의미
- 이 오류 발생 시 응답에 WWW-Authenticate 헤더와 함께 인증 방법 설명
- 참고
- 인증(Authentication): 본인이 누구인지 확인(로그인)
- 인가(Authorization) : 권한부여(admin 권한처럼 특정 리소스에 접근할 수 있는 권한, 인증이 있어야 인가가 있음)
- 오류 메시지가 Authorized이지만 인증 되지 않음
- 403 : Forbidden
- 서버가 요청을 이해했지만 승인 거부
- 주로 인증 자격 증명은 있지만 접근 권한이 불충분한 경우
- 404 : Not Found
- 요청 리소스를 찾을 수 없음
- 요청 리소스가 서버에 없음
- 권한이 부족한 리소스에 접근할 때, 해당 리소스를 숨기고 싶을 때
- 5XX(Server Error) : 서버오류 , 서버가 정상 요청을 처리하지 못함
- 서버 문제, 서버에 문제가 있기 때문에 재시도 하면 성공할 수 있음(복구가 되거나 하는 상황)
- 500 : Internal Server Error
- 서버 내부 문제로 오류 발생
- 애매할 때 500 발생
- 503 : Service Unavailable
- 서버의 일시적인 과부하 또는 예정된 작업으로 잠시 요청 처리할 수 없는 상태
- Retry-After 헤더 필드로 얼마 뒤에 복구되는지 보낼 수도 있음
- 만약 모르는 상태코드가 나타난다면?
- 클라이언트가 인식할 수 없는 상태코드를 서버가 반환한다면 상위 상태코드로 해석해서 처리
- 미래에 새로운 상태 코드가 추가되어도 클라이언트를 변경할 필요 없음
'Learning-log > Spring & JPA' 카테고리의 다른 글
(모든 개발자를 위한 HTTP 웹 기본 지식) 8-(3)~(6) HTTP 헤더2-캐시와 조건부 요청 (0) | 2023.04.27 |
---|---|
(모든 개발자를 위한 HTTP 웹 기본 지식) 7-(1)~(6) HTTP 일반헤더 (0) | 2023.04.23 |
(모든 개발자를 위한 HTTP 웹 기본 지식) 5-(1)~(2) HTTP메서드 활용 (0) | 2023.04.20 |
(모든 개발자를 위한 HTTP 웹 기본 지식) 4-(1)~(5) HTTP메서드 (0) | 2023.04.19 |
(모든 개발자를 위한 HTTP 웹 기본 지식) 3-(4) 비연결성, (5) HTTP메시지 (0) | 2023.04.19 |