HTTP 상태 코드
•
HTTP 상태 코드는 클라이언트가 보낸 HTTP 요청이 성공했는지 실패했는지를 서버에서 알려주는 코드이다.
•
3자리 숫자로 이루어져 있으며, 100번대 ~ 500번대가 존재한다.
•
1xx (Informational) : 요청이 수신되어 처리 중
•
2xx (Successful) : 요청이 정상적으로 처리 됨
•
3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요 → 다른 URL로 리다이렉션
•
4xx (Client Error) : 클라이언트 오류, 잘못된 문법이나 잘못된 데이터 요청으로 서버가 해당 요청을 수행할 수 없음
•
5xx (Server Error) : 서버 오류, 서버가 정상적으로 동작하지 못해 해당 요청을 처리하지 못함
1xx (Informational)
•
요청이 수신되어 처리 중이라는 의미로, 거의 사용되지 않는다.
2xx (Successful)
•
클라이언트의 요청을 성공적으로 처리함
•
200 OK
◦
요청이 정상적으로 처리됨
•
201 Created
◦
요청을 정상적으로 처리했고 새로운 리소스가 생성됨
•
202 Accepted
◦
요청은 접수되었지만 배치 처리 등의 이유로 처리가 완료되지 않음
◦
요청 처리 자체가 무거워 오래 걸릴 경우 비동기로 처리하여 완료되면 나중에 알려주겠다는 의미로 사용된다.
◦
응답 본문에 요청에 대한 상태와 요청 처리 완료 예정 추정 시간에 대한 정보를 포함해야한다.
•
204 No Content
◦
요청을 정상적으로 처리했지만, 응답 페이로드에 보낼 데이터가 없음
3xx (Redirection)
•
리다이렉션의 종류
◦
영구 리다이렉션 : 특정 리소스의 URL이 영구적으로 이동
◦
일시 리다이렉션 : 특정 리소스의 URL이 일시적으로 이동
◦
특수 리다이렉션 : 캐시를 활용할 것인가에 대한 여부
•
300 Multiple Choices
◦
요청에 대해 둘 이상의 가능한 응답이 있음
◦
클라이언트가 동시에 여러 리소스를 가리키는 URL을 요청하는 경우 해당 리소스들의 목록을 포함하여 응답 받는다.
◦
거의 사용되지 않는다.
•
301 Moved Permanently
◦
원래의 URL을 사용하지 않는 경우와 같이 리소스의 URI가 영구적으로 이동
◦
검색 엔진에서도 변경을 인지할 수 있다.
◦
GET이나 HEAD 메서드에 대한 응답으로만 사용한다.
◦
영구 리다이렉션으로 리다이렉트 요청 시 메서드가 GET으로 변하고 본문이 제거될 수 있다.(MAY)
•
302 Found
◦
리소스의 URI가 일시적으로 변경
◦
검색 엔진에서 URL을 변경하면 안된다.
◦
일시 리다이렉션으로 리다이렉트 요청 시 메서드가 GET으로 변하고 본문이 제거될 수 있다.(MAY)
301 vs 302
영구 리다이렉션과 일시 리다이렉션의 차이는 사람을 위한 처리가 아닌 검색 엔진이나 검색 봇을 위한 처리이다. 어떤 리다이렉션을 사용하느냐에 따라 검색 엔진이 크롤링하는 페이지에 대해 수집 주체가 달리지기 때문에 검색 엔진 최적화나 SEO에 영향을 미치게 된다. 리다이렉션을 부적절하게 사용하면 웹 페이지 랭크에 영향을 주어 해당 링크가 보유했던 높은 점수를 잃을 수 있다.
•
303 See Other
◦
리소스의 URI가 일시적으로 변경
◦
주로 PUT이나 POST 요청의 응답으로 클라이언트에게 리소스의 위치를 알려주는데 사용된다.
◦
일시 리다이렉션으로 리다이렉트 요청 시 메서드가 GET으로 변경된다.(MUST)
•
304 Not Modified
◦
클라이언트에게 리소스가 수정되지 않았음을 알려, 로컬 캐시에 저장된 데이터를 재사용
◦
로컬 캐시를 사용하기 때문에 응답에 메세지 바디를 포함하면 안된다.
◦
특수 리다이렉션으로, GET과 HEAD 메서드에만 동작한다.
•
307 Temporary Redirect
◦
리소스의 URI가 일시적으로 변경
◦
일시 리다이렉션으로 리다이렉트 요청 시 메서드와 본문을 유지한다.(POST로 요청 시 POST로 리다이렉트)
•
308 Permanent Redirect
◦
원래의 URL을 사용하지 않는 경우와 같이 리소스의 URI가 영구적으로 이동
◦
POST나 PUT 메서드에 대한 응답으로 사용한다.
◦
영구 리다이렉션으로 리다이렉트 요청 시 메서드와 본문을 유지한다.(POST로 요청 시 POST로 리다이렉트)
•
PRG(POST / REDIRECT / GET)
◦
멱등성을 보장하지 못하는 POST 메서드로 요청 후 새로고침을 하게되면 반복적으로 해당 요청이 들어와 문제가 발생할 수 있다.
◦
해당 요청을 처리 후 중복적으로 요청이 되는 것을 방지하기 위해 GET 메서드로 리다이렉트하는 것을 PRG라 한다.
4xx (Client Error)
•
클라이언트의 잘못된 요청으로 서버가 요청을 수행할 수 없는 상태로, 오류의 원인이 클라이언트에 있다.
•
클라이언트가 잘못된 요청을 보내는게 문제이기 때문에, 똑같은 요청을 재시도한다면 실패한다. → 복구 불가
•
400 Bad Request
◦
요청 구문이나 메세지 등등 클라이언트의 요청 중 잘못된 부분으로 인해 서버가 해당 요청을 처리할 수 없음
◦
요청 파라미터가 잘못되거나 API 스펙이 안 맞는 경우에 발생한다.
•
401 Unauthorized
◦
클라이언트에서 해당 리소스에 접근하기 위해서는 인증(Authentication)이 필요함 → 명명 오류인듯
인증(Authentication)
로그인과 같은 절차를 통해 사용자의 신원을 검증하는 행위
인가(Authorization)
특정 리소스나 기능에 대해 접근하기 위한 권한이 있는지 검증하는 행위
•
403 Forbidden
◦
서버가 요청은 이해했지만 요청에 대한 처리는 거부함
◦
주로 인증 자격(Authentication)은 있지만 접근 권한(Authorization)이 불충분한 경우 발생한다.
•
404 Not Found
◦
요청한 리소스가 서버에 존재하지 않음
◦
클라이언트가 특정 리소스에 접근할 때, 권한이 부족한 경우 해당 리소스를 숨기고 싶을 때도 사용된다.
◦
404 상태코드를 띄우는 링크를 브로큰 링크(broken link) 혹은 데드 링크(dead link)라고 부른다.
•
405 Method Not Allowd
◦
요청이 허용되지 않은 메소드임을 의미
◦
요청 URL에 대해 지원하지 않은 메서드로 요청 보냈을 때 발생한다.
•
406 Not Accepted
◦
요청이 내부 정책 혹은 로직상의 이유로 처리되지 않음
•
409 Confilct
◦
요청이 내부 로직상 confilct가 발생함
◦
요청이 이미 진행되었거나, 존재하는 리소스를 새로 추가하려할 때 발생한다.
5xx (Server Error)
•
서버 내부의 문제로 오류가 발생해 클라이언트의 요청을 처리할 수 없는 상태로, 오류의 원인이 서버에 있다.
•
클라이언트에서 똑같은 요청을 재시도한다면 서버의 상황에 따라 성공할 수 있다. → 복구 가능
•
500 Internal Server Error
◦
예외적이거나 예측하지 못한 에러가 발생하여 서버가 응답할 수 없음
•
502 Bad Gateway
◦
게이트웨이가 잘못되어 서버가 잘못된 요청을 수신했음
◦
서로 다른 프로토콜을 연결해주는 장치가 잘못된 프로토콜을 연결하거나 통신이 제대로 되지 않을 때 발생한다.
◦
인터넷 상의 서버가 다른 서버로부터 유효하지 않은 응답을 받은 경우에도 발생한다.
•
503 Service Unavailable
◦
서버가 일시적인 과부하 혹은 예정된 작업으로 인해 잠시간 요청을 처리할 수 없음
◦
서버가 과부하되거나, 서버 패치 및 업데이트 등 작업을 위해 서버를 다운 시켰거나 방화벽 설정이 잘못되어 있는 등 다양한 원인에 의해 발생한다.
◦
Retry-After 헤더 필드로 복구 예정 시간을 보낼 수 있다.
•
504 Gateway Timeout
◦
게이트웨이 시간 초과로 서버에서 요청을 처리하지 않음
◦
다른 서버에 요청을 보내고 응답을 기다리다 타임아웃이 나면 발생한다.
참고 :