Search

HTTP 상태 코드

생성일
2023/07/26 04:07
태그

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
게이트웨이 시간 초과로 서버에서 요청을 처리하지 않음
다른 서버에 요청을 보내고 응답을 기다리다 타임아웃이 나면 발생한다.
참고 :