※ 김영한 님의 인프런 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를 요약한 내용입니다.
✅ 1xx (Informational)
요청이 수신되어 처리중. 거의 사용하지 않음
✅ 2xx (Successful)
클라이언트의 요청을 성공적으로 처리
📌 200 OK
- 요청 성공
📌 201 Created
- 요청 성공해서 새로운 리소스가 생성됨
- 생성된 리소스는 응답의 Location 헤더 필드로 식별할 수 있다.
📌 202 Accepted
- 요청이 접수되었으나 처리가 완료되지 않았음
- 배치 처리
- 요청 접수 후 1시간 뒤에 배치 프로세스가 요청을 처리
📌 204 No Content
- 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
- Save 버튼
✅ 3xx (Redirection)
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
👉 영구 리다이렉션
- 특정 리소스의 URI가 영구적으로 이동
- 원래의 URL을 사용하지 않는다.
- 특정 리소스의 URI가 영국적으로 바꼈는데 클라이언트가 이전 URI를 보내는 경우
- 301, 308
📌 301 Moved Permanently
- 리다이텍트시 요청 메서드가 GET으로 변하고, 본문이 제거 될 수 있다.
- 항상 그런건 아니지만 대부분 그렇다.
📌 308 Permanent Redirect
- 301과 기능 같다.
- 리다이렉트 요청시에 요청 메서드와 본문을 유지 한다.
사실 실무에서는 메서드를 유지하지 않는다.
URI가 영구적으로 바뀌면 내부적으로 전달해야하는 데이터 자체가 바껴버린다.
POST로 와도 GET으로 돌리는게 맞다.
👉 일시 리다이렉션
- 일시적인 변경
- 주문 완료 후 주문 내역 화면으로 이동
- 302, 307, 303
📌 302 Found
- 리다이텍트시 요청 메서드가 GET으로 변하고, 본문이 제거 될 수 있다.
- 항상 그런건 아니지만 대부분 그렇다. (대부분 그런데 아닌 웹브라우저가 있긴 함.)
📌 307 Temporary Redirect
- 302와 기능 같다.
- 리다이렉트 요청시에 요청 메서드와 본문을 유지 한다.
- 요청 메서드가 절대 변경되면 안된다.
📌 303 See Other
- 302와 기능 같음
- 리다이렉트시 요청 메서드가 무조건 GET으로 변경된다.
📌 PRG: Post/Redirect/Get
POST로 주문후에 웹 브라우저를 새로고침하면?
새로고침은 다시 요청한다. → POST로 다시 요청하면 중복 주문이 될 수 있다.
- POST 요청(주문)을 받고 서버에서 로직 수행 후 응답으로 200 OK를 주는 것이 아닌 302 Found 리다이렉트를 응답으로 준다.
- 웹 브라우저는 자동 리다이렉트를 하고 GET으로 주문한 상세 데이터 정보를 가진 URI로 (리다이렉트시 받은 URI) GET 요청을 한다.
- 서버에서 200 OK 응답
- 결과 화면에서 새로고침으로 인해 다시 요청해도 GET 요청을 함
👉 특수 리다이렉션
- 결과 대신 캐시를 사용
- 304
📌 304 Not Modified
- 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용한다. (캐시로 리다이렉트 한다.)
- 클라이언트는 로컬 캐시를 사용해야 하므로 304 응답은 응답에 메시지 바디를 포함하면 안된다.
- 조건부 GET, HEAD 요청시 사용
✅ 4xx (Client Error)
오류의 원인이 클라이언트에 있다.
클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에 똑같은 요청을 재시도 해도 실패한다.
📌 400 Bad Request
- 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없다.
- 요청 구문, 메시지 등등 오류
- 클라이언트 요청 내용 검토 필요
📌 401 Unauthorized
- 클라이언트가 해당 리소스에 대한 이증이 필요함
📌 401 Forbidden
- 서버가 요청을 이해했지만 승인을 거부함
- 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우
- 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우
📌 404 Not Found
- 요청 리소스가 서버에 없음
- 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때
✅ 5xx (Server Error)
서버에 문제가 있기 때문에 발생하는 오류로 복구가 되거나 등등에 의해 요청을 재시도하면 성공할 수도 있다.
📌 500 Internal Server Error
- 서버 내부 문제.
- 애매하면 500오류.
📌 503 Service Unavailable
- 서비스 이용 불가.
- 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음.
500대 에러는 서버 내부 문제. 쿼리 문제. DB가 down되거나 등등 서버 자체 문제로 인해 발생하는 오류이다.
비즈니스 로직상 예외 사항이고, 정상적인 프로세스인 경우 500 에러를 내면 안된다.
'Web' 카테고리의 다른 글
[HTTP 웹 기본 지식] 섹션8. HTTP 헤더2 캐시와 조건부 요청 (0) | 2022.11.20 |
---|---|
[HTTP 웹 기본 지식] 섹션7. HTTP 헤더1 일반 헤더 (0) | 2022.11.19 |
[HTTP 웹 기본 지식] 섹션5. HTTP 메서드 활용 (0) | 2022.11.18 |
[HTTP 웹 기본 지식] 섹션4. HTTP 메서드 (0) | 2022.11.17 |
[HTTP 웹 기본 지식] 섹션3. HTTP 기본 (0) | 2022.11.17 |