728x90
반응형
HTTP 상태 코드
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료 되었는지 알려준다.
정보를 제공하는 응답/성공적인 응답/리다이렉트/클라이언트 에러/서버 에러 와 같이 총 5가지 그룹으로
응답이 나누어진다.
1xx 정보 응답
서버가 요청을 받았으며 프로세스를 계속 진행
→ 잘 사용되진 않음
- 100 Continue
- 진행 중임을 의미하는 응답 코드
- 현재까지 진행 상태에는 문제가 없으며, 클라이언트가 계속 요청을 하거나 이미 요청을 완료한 경우,
무시해도 되는 응답 코드
- 101 Switching Protocol
- 클라이언트에 의해 보낸 업그레이드 요청 헤더에 대한 응답 코드
- 클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답에 들어가며, 서버에서 프로토콜을 변경할 것임을
알려주는 응답, Websocket 프로토콜 전환 시 사용
- 102 Processing(WebDAV)
- 서버가 요청을 수신하였으며 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음을 나타내는 응답 코드
2xx 성공 응답 (Successful)
요청을 성공적으로 받았으며 인식했고 수용함
- 200 OK
- 요청이 성공적으로 이루어졌다는 응답 코드
- 성공 의미는 HTTP 메서드에 따라 달라진다.
1) GET : 리소스를 불러와 메시지 바디에 전송됨.
2) HEAD : 개체 헤더가 메시지 바디에 있음.
3) PUT 또는 POST : 수행 결과에 대한 리소스가 메시지 바디에 전송됨.
4) TRACE : 메시지 바디는 서버에서 수신한 요청 메시지를 포함함.
- 201 Created
- 요청이 성공적이며 그 결과로 새로운 리소스가 생성되었음을 나타내는 응답 코드
- 일반적으로 POST 또는 일부 PUT 요청에 대해 나오는 응답이다.
- 202 Accepted
- 요청이 접수되었지만 처리가 완료되지 않았음을 나타내는 응답 코드
- 이후 HTTP로 비동기 응답을 보내는 것에 대해 요청 처리에 대한 결과를 명확히 명시하고 있지 않음.
- 다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나 배치 프로세스를 하고 있는 경우를 위해 만들어짐. (ex. 요청 접수 후 1시간 뒤에 배치 프로세스가 요청을 처리함)
- 203 Non-Authoritative Information
- 돌려받은 메타 정보 세트가 오리진 서버의 정보와 일치하지 않으나 로컬이나 서드 파티 복사본에서 모아졌음을 의미하는 응답 코드
- 이런 조건에서는, 이 응답보다 200 OK 응답이 무조건 우선 시 된다.
- 204 No Content
- 서버가 요청을 성공적으로 수행했지만 응답 페이로드 본문에 보낼 데이터가 없음
- 사용자 - 에이전트는 리소스가 캐시된 헤더를 새로운 것으로 업데이트 할 수 있음
- (ex. 웹 문서 편집기에서 save 버튼
- save 버튼의 결과로 아무 내용이 없어도 된다.
- save 버튼을 눌러도 같은 화면을 유지해야 한다.
- 결과 내용이 없어도 204 메시지(2xx)만으로 성공을 인식할 수 있다.)
- 205 Reset Content
- 요청을 완수한 이후, 사용자 에이전트에게 이 요청을 보낸 문서 뷰를 리셋 하라고 알려주는 응답 코드
- 206 Partial Content
- 클라이언트에서 복수의 스트림을 분할 다운로드 하고자 범위 헤더를 전송했을 때 나타나는 응답 코드
- 207 Multi-Status
- 여러 리소스가 여러 상태 코드인 상황이 적절한 경우에 해당되는 정보를 전달하는 멀티-상태 응답 코드
- WebDAV(Web Distributed Authoring and Vesioning)에 사용됨.
- 208 Already Reported(WebDAV)
- Prostat(property와 status 합성) 응답 속성의 코드
- 동일 컬렉션으로 바인드 된 복수의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 사용됨.
- WebDAV(Web Distributed Authoring and Vesioning)에 사용됨.
3xx 리다이렉션(Redirection)
요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요함
- 300 Multiple Choices
- 안쓰는 응답 코드
- 301 Moved Permanently
- 리다이렉트 시 요청 메서드가 GET 으로 변하고, 본문이 제거될 수 있다. (MAY)
- 예를 들어, POST /event 라고 보내는 것은 내부에 어떤 HTML 폼에서 정보를 입력하게 되면 그 정보의 사용자를 이벤트에 등록한다는 것을 의미한다고 하자.
1) HTML 폼에 정보를 입력하고 버튼을 누르면 PSOT /event 를 서버로 보낸다.
→ 이때, 서버에서는 이제 더이상 /event URL을 사용하지 않아서
클라이언트에게 바뀐 URL을 알려줘야지 해서 301 응답을 보낸다.
2) 새로 바뀐 URL /new-event 정보를 Location 헤더에 넣어 301 응답코드를 클라이언트에게 보낸다.
3) 클라이언트(웹 브라우저)는 받은 응답에서 Location 헤더에 있는 정보를 인식해서
/event 였던 URL 창을 /new-event 로 자동으로 변경해준다. 즉, 자동 리다이렉트 해준다.
4) 웹 브라우저는 바뀐 URL을 가지고 다시 요청을 하는데 이때는 POST가 아닌 GET 으로 요청을 보내는데
메시지 바디도 없이 요청을 보낸다. 즉, 나는 등록 하기를 원해서 데이터를 POST로 보냈지만 결과적으로는
그냥 GET으로 해서 새로운 URL 인 /new-event 가 보내지고 메시지 바디 부분이 다 사라진다.
5) 그러면 GET /new-event 를 받은 서버는 새로운 이벤트 페이지를 보여주게 된다.
(그럼 이때부터 다시 처음에 입력한 정보를 작성한다,,)
- 302 Found
- 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다. (MAY)
- 303 See Other
- 302와 기능은 같음
- 리다이렉트 시 요청 메서드가 GET으로 변경
- 304 Not Modified
- 캐시를 목적으로 사용
- 클라이언트에게 리소스가 수정되지 않았음을 알려준다.
따라서 클라이언트는 로컬 PC에 저장된 캐시를 재 사용한다. (캐시로 리다이렉트 함) - 304 응답은 응답에 메시지 바디를 포함하면 X (로컬 캐시를 사용해야 하기 때문)
- 조건부 GET, HEAD 요청 시에 사용
- 307 Temporary Redirect
- 302와 기능은 같음
- 리다이렉트 시 요청 메서드와 본문 유지 (요청 메서드를 변경하면 안된다! MUST NOT)
- 308 Permanent Redirect
- 301 응답코드와 기능은 같음
- 실무에서는 사실 308 응답코드를 잘 사용하진 않는다.
보통 URL이 변경되면 내부적으로 전달해야 되는 데이터 자체가 다 바뀌어버리기 때문에
리다이렉트로 인한 요청 시 POST와 메시지가 보내지면 오류가 날 수 있어 그냥 GET으로 바꿔 보내는 것이 맞다. - 리다이렉트 시 요청 메서드와 본문이 유지됨 (처음 POST를 보내면 리다이렉트도 POST임)
- 위 301 응답코드에서는 리다이렉트로 다시 요청할 때 PSOT에서 GET으로 바뀌어 요청이 되었지만,
308은 처음 요청이 POST였으면 리다이렉트 되어 다시 요청을 보내야 할 때도 처음 그대로 POST로 요청을 한다.
4xx 클라이언트 오류 (Client Error)
클라이언트의 요청에 잘못된 문법 등으로 서버가 요청을 수행할 수 없음.
오류의 원인이 클라이언트에 있음.
중요! (4xx 와 5xx의 차이점)
→ 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에, 똑같이 재시도를 해도 계속 실패함
- 400 Bad Request
- 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음을 나타내는 응답 코드
- 요청 구문, 메시지 등등의 오류
- 클라이언트는 요청 내용을 다시 검토하고 보내야 함.
- ex) 잘못된 요청 파라미터를 보낸 경우, API 스펙에 맞지 않게 보낸 경우
- 401 Unauthorized
- 클라이언트가 해당 리소스에 대한 인증이 필요하다는 응답코드
- 인증(Authentication) 되지 않음
- 401 오류 발생 시, 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명 해줘야 함
- 참고
- 인증 (Authentication) : 본인이 누구인지 확인, (로그인)
- 인가 (Authorization) : 권한부여 (ADMIN 권한처럼 특정 리소스에 접근할 수 있는 권한, 인증이 있어야 인가가 있음)
→ 오류 메시지는 Unauthorized 이지만 인증 되지 않음을 의미
- 403 Forbidden
- 서버가 요청을 이해했지만 승인을 거부한다는 응답코드
- 주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우
- ex) Admin 등급이 아닌 사용자가 로그인은 했지만, Admin 등급의 리소스에 접근하는 경우
- 404 Not Found
- 요청 받은 리소스를 서버가 찾을 수 없음을 의미하는 응답 코드
- 또는 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때
- 405 Method Not Allowed
- 요청 메서드를 서버가 알고 있지만, 제거되어 더 이상 사용할 수 없음을 의미하는 응답 코드
- 이 405 에러 코드를 응답할 경우, 반드시 현재 대상 리소스에서 지원하는 메서드의 리스트가 들어 있는 Allow 헤더 필드를 생성해야 함.
- 408 Request Timeout
- 서버가 사용하지 않는 연결을 끊고 싶다는 것을 의미하는 응답 코드
- 요청 한지 시간이 오래된 연결에 일부 서버가 전송하며, 어떨 땐 이전 클라이언트로부터 어떠한 요청이 없었더라도 보내지기도 함.
5xx 서버 오류 (Server Error)
서버 문제로 오류 발생!
서버에 문제가 있기 때문에 재시도 하면 성공 할 수도 있음(복구가 되거나 등등)
🚨 5xx 오류는 정말 서버 내부적으로 로직, 쿼리 상으로 문제가 있을 때만 발생 시켜야 한다!!
- 500 Internal Server Error
- 서버 내부 문제로 오류가 발생했음을 의미하는 응답 코드
- 애매하면 500 오류로 응답함.
- 501 Not Implemented
- 요청을 수행할 수 있는 기능을 서버가 지원하지 않음을 나타내는 응답 코드
- 서버가 요청 방법을 이해하지 못하거나 어떤 리소스를 지원하지 않는 경우에 발생함.
- 503 Service Unavailable
- 서비스 이용 불가
- 서버가 일시적인 과부화 또는 예정된 작업으로 잠시 요청을 처리할 수 없음을 의미하는 응답 코드
- Retry-After 헤더 필드로 얼마 뒤에 복구 되는지 보낼 수 있음
- 505 HTTP Version Not Supported
- 요청에 사용된 HTTP 버전을 서버가 지원하지 않음을 의미하는 응답 코드
- 510 Not Extended
- 서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요하다는 것을 의미하는 응답 코드
- 511 Network Authentication Required
- 클라이언트가 네트워크 엑세스를 얻기 위해 인증을 받아야 할 필요가 있음을 의미하는 응답 코드
728x90
반응형
'Studying' 카테고리의 다른 글
리다이렉트 (Redirect) (0) | 2024.01.02 |
---|---|
Rest vs Restful (2) | 2024.01.02 |
클라우드 서비스 개념 공부 (2) | 2023.07.17 |
코딩테스트_SQL공부(업데이트중) (2) | 2023.07.12 |
JPA, MyBatis란 (0) | 2023.07.08 |