HTTP 상태코드 소개
상태코드란? 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다.
이렇게 상태코드의 앞자리 부분에 따라 의미가 달라진다
1XX는 거의 사용되지 않으므로 생략한다.
2xx - 성공
200번대는 클라언트의 요청을 성공적으로 처리했음을 의미한다.
200 OK
요청 성공을 의미한다.
201 created
요청 성공해서 새로운 리소스가 생성됨을 나타낸다.
202 Accepted
요청이 접수되었으나 처리가 왼료되지는 않음
접수시간과 처리 시간의 시간차가 있을 때 주로 사용된다.
204 No Content
서버가 요청을 성공적으로 수행했지만, 응답 본문에 보낼 데이터가 없음
예를 들어 save를 했을 때 결과로 받을 내용이 아무것도 없다.
3xx - 리다이렉션
요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요하다는 뜻이다.
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면 그 위치로 자동으로 이동한다.(리다이렉트)
영구 리다이렉션(301, 308)
리소스의 URI가 영구적으로 이동한다.
원래의 URI를 사용하지 않는다.
301의 경우 리다이레트 시 요청메서드가 get으로 변하고, 본문이 제거된다.
따라서 사용자는 새로운 경로에서 정보를 다시 입력해야한다.
사실 이렇게 URI가 바뀐 경우, 데이터 구성도 거의 바뀌어서 본문이 제거되는 것이 오히려 괜찮다.
308의 경우, 301과 다르게 본문을 유지한다.
일시적인 리다이렉션
리소스의 URI가 일시적으로 변경
따라서 검색엔진 등으세 URL을 변경하면 안됨
POST 주문 후에 웹 브라우저를 새로고침하면 -> 중복 주문이 될 수 있다..
만약 위 상황에서 주문자가 결과 화면에서 새로고침을 한다면 POST 요청이 들어가 재주문 될수도 있다.
어차피 서버에서 주문코드 등으로 이런 부분은 막겠지만 클라이언트에서 이를 한번 더 막을 수 있는 방법이 있다.
따라서 위 로직과 같이 POST 메세지에 대한 응답으로 302 FOUND를 주면, 해당 위치로 GET 메세지가 요청된다.
그러면 사용자는 주문완료 페이지를 볼 수 있고, 여기서 새로고침을 아무리 하더라도 주문 요청 메세지는 가지 않는다!
302, 307, 302 중에 주로 302가 사용된다!
300, 304
300은 거의 사용되지 않고,
304 Not Modified는 중요하다!
이는 캐시 목적으로 사용된다. 클라이언트에게 리소스가 수정되지 않았으니 이미 로컬에 저장되어있는 캐시를 재사용해도 된다는 메세지를전할 수 있다.
304응답은 바디가 포함되면 안된다.
4xx - 클라이언트 오류
클라이언트 요청에 잘못된 문법 등이 있어 서버가 요청을 수행할 수 없다.
오류의 원인이 클라이언트!
클라이언트가 이미 잘못된 요청을 보내고있기 때문에 재시도해도 계속 실패함
400 Bad Request
클라이언트가 잘못된 요구를 해서 서버가 이를 처리할 수 없음
요청 구문, 메세지 오류 등등
401 Unauthorized
클라이언트가 해당 리소스에 대한 인증이 필요
이 오류는 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명한다.
참고로 인증이란? 누구인지 확인
인가란? 권한 부여
여기서는 인증되지 않음을 의미함!
403 Forbidden
서버가 요청을 이해했지만 승인을 거절
예를 들어 어드민 리소스에 어드민 등급인 사용자가 접근함
404 Not Found
클라이언트가 요청한 리소스가 서버에 없다
또는 클라이언트가 요청한 리소스를 숨기고 싶을 때
5xx - Server Error
500 Internal Server Error
서버 내부 문제로 오류 발생
애매하면 보통 500 에러 낸다.
503 Service Unavailable
서버가 일시적인 과부하 또는 예정된 작업으로 요청을 잠시 처리할 수 없음
Retry-After 헤더 필드로 얼마뒤에 복구되는지도 보낼 수 있음
중요한 건 500에러는 정말 서버에 오류가 발생했을 때만 내려져야 함
따라서 서버 개발자는 웬만하면 500에러를 쓰지 말아아한다.
20세 이상이 접근가능한 리소스에 10세가 접근 -> 비지니스 로직 상 문제, 서버 문제는 아님
500대 에러가 아닌 400대 에러를 내야 함
출처
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
모든 개발자를 위한 HTTP 웹 기본 지식 강의 | 김영한 - 인프런
김영한 | , [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술이사 김영한의 스프링 완전 정복 로드맵을 먼저 확인해주세요. (바
www.inflearn.com
'CSE > 네트워크' 카테고리의 다른 글
[네트워크] HTTP 헤더 - 캐시와 조건부 요청 (2) | 2025.03.28 |
---|---|
[네트워크] HTTP 헤더 - 일반헤더 (0) | 2025.03.28 |
[네트워크] HTTP 메서드 활용 (2) | 2025.03.28 |
[네트워크] HTTP 메서드 (3) | 2025.03.27 |
[네트워크] HTTP 기본 (1) | 2025.03.25 |