[Web] HTTP 상태코드란? 404 Not Found란?

HTTP 상태 코드란? 

웹 서비스를 이용하다 보면 종종 "404 Not Found"라는 오류 메시지를 볼 수 있다. 이러한 오류 메시지는 HTTP 상태 코드를 기반으로 한다. 

 

HTTP 상태 코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다. HTTP 상태 코드는 3자리 숫자로 이루어져 있으며 첫 번째 자리가 1부터 5까지 존재하며, 크게 아래와 같이 분류된다.

 

 

  • 1xx (Informational) : 요청이 수신되어 처리중
  • 2xx (Successful) : 요청 정상 처리
  • 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요
  • 4xx (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
  • 5xx (Server Error) : 서버 오류, 서버가 정상 요청을 처리하지 못함

 

예를 들어 흔하게 볼 수 있는 404 Not Found 에러는 4xx 상태 코드에 속한다. 즉, 클라이언트 오류라는 뜻이다.

 

자주 사용되는 상태코드에 대해서만 간략히 알아보자.

 

+모든 HTTT 상태 코드에 대해 알고 싶다면 다음을 참고하자.

 

 

HTTP 상태 코드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 아래는 HTTP(하이퍼텍스트 전송 프로토콜) 응답 상태 코드의 목록이다. IANA가 현재 공식 HTTP 상태 코드 레지스트리를 관리하고 있다. 모든 HTTP 응답 코드는 5개의

ko.wikipedia.org

 

 

1xx (Informational) 상태코드

1xx 상태 코드는 서버가 요청을 받았으며 작업을 계속 진행하라는 의미이다. 1xx 코드는 HTTP 1.0에서 지원하지 않으며, 잘 사용하지 않는다.

 

100 Continue

진행 중임을 나타내는 응답 코드이다. 클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 뜻이다.

 

 

 

2xx (Successful) 상태 코드

2xx 상태 코드는 요청을 성공적으로 받았으며 이를 이해하고 수용했음을 의미한다.

 

200 OK

요청이 성공적으로 수행되었음을 의미한다. 주로 GET 요청에 대한 응답이다.

 

201 Createad

요청이 성공적으로 수행되었으며, 그 결과로 새로운 리소스가 생성됨을 의미한다. 주로 POST 요청에 대한 응답이다.

 

202 Accepted

요청은 접수되었지만 처리가 완료되지 않았음을 의미한다. 배치 처리와 같이 요청 접수 후 일정 시간이 지난 후 요청을 처리하는 경우의 응답이다.

 

203 Non-Authoritative Information

요청이 성공적으로 수행되었으나 요청에 대한 검증이 되지 않았음을 의미한다.

 

204 No Content

요청이 성공적으로 수행되었으나 응답 payload에 보낼 데이터가 없음을 의미한다. 

 

 

 

3xx (Redirection) 상태코드

3xx 상태코드는 요청을 완료하기 위해 추가 조치가 필요함을 의미한다.

 

영구 리다이렉션(301, 308)

영구 리다이렉션은 리소스의 URI가 영구적으로 이동했음을 의미한다. 원래의 URL을 사용하지 않고, 검색 엔진 등에서도 변경을 인지한다. 301, 308 상태 코드가 여기에 속한다.

 

301 Moved Permanently

요청한 리소스의 URI가 변경되었음을 의미한다. 해당 응답을 받을 경우 브라우저는 HTTP 헤더에 들어있는 Location 필드를 찾아 해당 필드가 존재할 경우 Location 필드에 담긴 URL로 자동으로 리다이렉션 한다.

 

*리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수도 있다. 예를 들어 처음 POST요청을 보냈더라도 리다이렉트시 GET 요청으로 바뀔수도 있다는 것이다.

 

308 Permanent Redirect

301과 같은 기능을 하지만, 리다이렉트시 요청 메서드와 본문을 유지한다는 점이 다르다. 예를 들어 처음 POST를 보냈다면 리다이렉트도 POST 요청을 유지한다.

 

 

일시적인 리다이렉션(302, 303, 307)

일시적인 리다이렉션은 리소스의 URI가 일시적으로 변경됐음을 의미한다. 따라서 검색 엔진 등에서 URL을 변경하면 안 된다.

 

302 Found

요청한 리소스의 URI가 일시적으로 변경됐음을 의미한다. 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될수도 있다.

 

303 See Other

302와 기능은 같다. 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때의 응답이다. 리다이렉트시 요청 메서드가 GET으로 변경된다.

 

307 Temporary Redirect

302와 기능은 같다. 리다이렉트 시 요청 메서드와 본문을 유지한다는 점이 다르다. 

 

참고) 302와 303, 307의 차이

여기서 잠깐 302와 303이 뭐가 다른지 헷갈릴 수도 있겠다. 처음 302 스펙의 의도는 HTTP 메서드를 유지하는 것이었다. 하지만 대부분의 웹 브라우저들이 요청 메서드를 GET 메서드로 바꾸는 식으로 동작했다. 이처럼 모호한 302를 대신해서 303, 307 상태 코드가 등장하였다. 
303은 무조건 요청 메서드가 GET으로 변경되고, 307은 요청 메서드를 유지하도록 명확하게 한 것이다.

 

 

기타 리다이렉션(300, 304)

 

300 Multiple Choices 

요청에 대해 하나 이상의 리소스가 존재함을 의미한다. 잘 안 쓰인다.

 

304 Not Modified

수정되지 않음을 의미한다. 주로 캐시를 목적으로 사용된다. 클라이언트에게 리소스가 수정되지 않았음을 알려주어 클라이언트가 저장된 캐시를 재사용(캐시로 리다이렉트)하도록 유도한다. 이러한 304 응답은 메시지 바디를 포함해선 안된다.

 

 

4xx (Client Error) 상태코드

4xx 상태 코드는 오류의 원인이 클라이언트에 있으며 서버가 요청을 수행할 수 없음을 의미한다.

 

 

400 Bad Request

클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음을 의미한다. 예를 들어 요청 파라미터가 잘못되거나 API 스펙이 맞지 않을 때 발생한다.

 

401 Unauthorized

클라이언트가 해당 리소스에 대한 인증이 필요함을 의미한다. 예를 들어 로그인이 필요한 API를 비로그인 사용자가 호출했을 때 사용된다.

 

403 Forbidden

서버가 요청을 이해했지만 승인을 거부했음을 의미한다. 주로 인증 자격은 있지만, 접근 권한이 불충분한 경우 발생한다. 예를 들어 admin 등급이 아닌 사용자가 로그인은 했지만, admin 등급의 리소스에 접근하는 경우가 있다.

 

404 Not Found

요청 리소스를 찾을 수 없음을 의미한다. 요청 리소스가 서버에 없거나 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때 사용한다.

 

 

 

5xx (Server Error) 상태코드

5xx 상태코드는 서버 오류를 의미한다. 서버에 문제가 있기 때문에 재시도하면 성공할 수도 있다.

 

500 Internal Server Error

서버 문제로 오류가 발생했음을 의미한다. 서버에 오류가 발생했으나 처리 방법을 알 수 없을 경우 대부분 이 상태 코드를 사용한다.

 

502 Bad Gateway

서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미한다. 보통 서버에 접속하는 사용자가 많아 과부하될 때 발생한다.

 

503 Service Unavailable

서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음을 의미한다.

 

 

 

 

 

반응형

댓글

Designed by JB FACTORY