이 글은 김영한 강사님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의에 출처를 두고 있습니다.
• 1xx (Informational): 요청이 수신되어 처리중 -(거의 x)
• 2xx (Successful): 요청 정상 처리
• 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
• 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
• 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
[방법]
- 클라이언트는 상위 상태코드로 해석해서 처리
- 미래에 new 상태코드가 추가된다 해도, 변경 필요 x
ex)
295 ??? => 2XX(200오류네아 200이니까 성공인갑다)
451 ??? => 4XX (400오류네아 400대니까 걍 클라이언트 오류인갑다)
599 ??? -> 5XX (500 오류네)
• 200 OK
• 201 Created
• 202 Accepted
• 204 No Content
* 성공하여 새로 생성된 '리소스'의 위치를 'Location 헤더 필드'에 넣어 응답함
- 배치 처리 같은 곳에서 사용
ex) 요청 접수한 후 1시간 뒤 배치 프로세스가 요청을 처리함
ex) 웹 문서 편집기에 save 버튼
- 애초에 저장만 되면 되고, 굳이 다른 내용을 반납할 필요가 없음
- save 버튼을 눌러도 같은 화면을 유지해야 함
Q. <개인 궁금증>
=> 여기서 말하는 save가 임시저장일까?
• 300 Multiple Choices => 별로 x
• 301 Moved Permanently
• 302 Found
• 303 See Other
• 304 Not Modified
• 307 Temporary Redirect
• 308 Permanent Redirect
A.
웹 브라우저에서는 3XX 응답의 결과에 'Location 헤더'가 있다면, Location위치로 자동 이동한다.(리다이렉트)
- 리소스 URI가 영구적으로 이동
- 원래의 URL로 다시 사용x, 검색 엔진 등에서도 변경 인지
- 301 Moved Permanently _더 많이 씀
• 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY:일 수도 있고 아닐 수도)- 308 Permanent Redirect
• 301과 기능은 같음
• 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
- 리소스의 URI가 일시적으로 변경
- 따라서 검색 엔진 등에서 URL을 변경하면 안됨
- 302 Found
• 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY_일 수도 아닐 수도)- 307 Temporary Redirect
• 302와 기능은 같음
• 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)- 303 See Other
• 302와 기능은 같음
• 리다이렉트시 요청 메서드가 GET으로 무조건 변경
.
.
- POST로 주문 후, '중복 주문' 방지해줌
=> 주문 결과 화면을 GET 메서드로 Redirect 해주니까!새로고침(F5)
해도 결과화면을 GET으로 조회해
=> URL은 POST -> GET으로 리다이렉트 됨.
=> 곧 중복 주문이 되지 않고, '결과 화면'만을 GET으로 재요청(Redirect) 하는거지
300 Multiple Choices: 안쓴다.- 304 Not Modified
• 캐시를 목적으로 사용
• 클라이언트에게 리소스가 수정되지 않았음을 알려준다.
-> 따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용 (캐시로 리다이렉트 한다.)
=> 클라) 서버야 리소스 좀 줘라, 서버) ㄴㄴ 캐시꺼 재사용 좀 혀- 304 응답은 응답에 메시지 바디를 포함하면 안된다. (로컬 캐시를 사용해야 하므로)
- 조건부 GET, HEAD 요청시 사용
- 애초에 원인이 '클라이언트'에 있음
- 오류는 보통 클라이언트 요청에 잘못된 문법,요청, 데이터 등을 보내서임
=> 그러다 보니 똑같이 재요청을 해도 성공할리가 없음
- 클라이언트는 요청 내용을 다시 검토하고 보내야 함.
ex) 요청 파라미터가 잘못됨, API 스펙이 맞지 x
- 인증(Authentication): 본인이 누구인지 확인, (로그인)
- 인가(Authorization): 권한부여 (ADMIN 권한처럼 특정 리소스에 접근할 수 있는 권한,
인증이 있어야 인가가 있음)
• 오류 메시지가Unauthorized 으로 지었는데 아이러니함.. 이 오류는 '인증'(Authentication)이 되지 않아 발생한거기에..
* 요청 리소스가 서버에 없음
* 또는 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때
- 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음
- Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수도 있음
찐 서버의 오류가 났을 때 쓰자...
예를 들면 DB에 오류가 났던, 쿼리에 문제가 생겼다거나 NullPointException이 떴다거나...