HTTP 웹 기본 지식 정리2
“김영한” 님의 인프런 강의 “모든 개발자를 위한 HTTP 웹 기본 지식”을 듣고 정리한 글입니다.
네트워크 상태 코드
1. 1xx
- Informational, 요청이 수신되어 처리 중
- 거의 사용되지 않음
2. 2xx
- Successful, 요청 정상 처리
- 200: OK, 요청 성공
- 201: Created
새로운 리소스가 생성됨 (주로 post 요청 시)
새로운 리소스의 Location 헤더 필드가 있을 수 있음 - 202: Accepted
요청이 접수되었으나 처리가 완료되지 않았음
배치 처리 등 - 204: No Content
응답 페이로드 본문에 보낼 데이터가 없음
save 버튼의 응답 등 - 상태 코드 중 일부만 사용하는 경우가 많다.
3. 3xx
- Redirection, 요청을 완료하려면 추가 행동 필요
- 리다이렉션
- 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면
Location 위치로 자동 이동한다. (리다이렉트)
- 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면
- 영구 리다이렉션
- 리소스의 URI가 영구적으로 이동
- 301: Moved Permanently
요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음 (아마도) - 308: Permanent Redirect
요청 메서드와 본문이 유지됨 (POST면 POST 유지)
(단, 실무에서는 308 방식을 잘 사용하지 않음)
- 일시 리다이렉션
- 리소스의 URI가 일시적으로 변경
검색 엔진 등에서 URL을 변경하면 안 됨 - 302: Found
요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음 (아마도) - 303: See Other
요청 메서드가 GET으로 변경 (반드시) - 307: Temporary Redirect
요청 메서드와 본문 유지 (반드시) - 실무에서는 302를 많이 사용함. 큰 문제 없음
- PRG: Post/Redirect/Get (중요)
POST로 주문 후, 새로 고침으로 인한 중복 주문을 방지하기 위한 패턴
POST로 주문 후, 주문 결과 화면을 GET 메서드로 리다이렉트
새로 고침 해도 GET으로 결과 화면만 조회
클라이언트 단에서도 이와 같은 처리가 필요하다.
- 리소스의 URI가 일시적으로 변경
- 기타 리다이렉션
- 300: 안 쓴다.
- 304: Not Modified (중요)
캐시로 리다이렉트
클라이언트에게 리소스가 수정되지 않았음을 알려준다.
클라이언트는 로컬PC에 저장된 캐시를 재사용한다.
응답에 메시지 바디가 포함되지 않는다 (로컬 캐시를 사용하므로)
4. 4xx
- Client Error, 클라이언트 오류
- 오류의 원인이 클라이언트에게 있음 (잘못된 문법 등)
- 중요! 똑같은 재시도는 실패함 (5xx와의 차이)
- 400: Bad Request
- 401: Unauthorized (이름이 아쉬움)
- 인증되지 않음 (로그인 등)
- 응답에 WWW-Authenticate 헤더와 함께 인증 방법 설명
- 403: Forbidden
- 서버가 요청을 이해했지만 승인을 거부
- 접근 권한이 불충분한 경우
- 404: Not Found
- 요청 리소스가 서버에 없음
- 403 대신 사용되기도 함
5. 5xx
- Server Error, 서버 오류
- 서버가 정상 요청을 처리하지 못함
- 재시도하면 성공할 수도 있음
- 500: Internal Server Error
애매하면 500 - 503: Service Unavailable
- 서비스 이용 불가
- 일시적인 과부하 등으로 잠시 요청을 처리할 수 없음
- 5xx 오류는 가급적 만들어서는 안 된다!
예상할 수 있는 예외 케이스일 경우, 5xx로 처리하는 것이 아님.
기타
- 인식할 수 없는 상태코드인 경우
=> 상위 상태코드로 해석한다 (299 => 2xx)
참고자료
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의