[Network] (내가 보려고 정리한) HTTP 응답 코드

Sony·2023년 5월 23일
4

🖥️ CS

목록 보기
1/1

📌 Intro

우리는 웹 사이트를 요청하고 그에 대한 응답을 받을 때 HTTP 프로토콜을 통해 데이터를 주고 받는다. 클라이언트는 서버로부터 응답을 받을 때 웹 페이지뿐만 아니라 HTTP 패킷에 응답의 정보를 담은 코드를 함께 받는데, 이 코드를 HTTP 응답코드(HTTP Response Code)라고 한다.

HTTP 상태 코드는 매우 잘 정리된 형식으로, 상태 코드만 잘 확인해도 클라이언트가 서버로 보낸 요청에 대한 응답이 성공인지 실패인지, 구체적으로 어떤 성공인지 어떤 실패인지를 자세히 알 수 있다. 따라서 클라이언트에선 이 응답코드에 따라 응답의 상태를 판단한다.

📌 HTTP 상태 코드

1️⃣ 1xx Informational (조건부 응답)

리퀘스트를 받고, 처리 중에 있음. (요청을 받았으며 작업을 계속한다)

  • 100 Continue (계속) : 요청자는 요청을 계속해야 한다. 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸다.

  • 101 Switching Protocol (프로토콜 전환) : 요청자가 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중이다.

  • 102 Processing (처리, RFC 2518) : 서버가 요청을 수신하였으며 이를 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음을 알려준다.

2️⃣ 2xx Success (성공)

리퀘스트를 정상적으로 처리함. (클라이언트 요청이 성공적으로 수행)

  • 200 OK (성공) : 응답코드 200을 받았다면, 가장 완벽한 상황이다. 서버가 요청을 제대로 처리했다는 뜻으로 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다. 성공의 의미는 HTTP 메서드에 따라 달라진다.

    1) GET : 리소스를 불러와서 메시지 바디에 전송됐다.
    2) HEAD : 개체 해더가 메시지 바디에 있다.
    3) PUT 또는 POST : 수행 결과에 대한 리소스가 메시지 바디에 전송됐다.
    4) DELETE : 삭제를 수행했고 응답 메시지가 이후의 상태를 설명한다.
    5) TRACE : 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있다.

  • 201 Created (작성됨) : 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성. 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라온다.

  • 202 Accepted (허용됨) : 서버가 요청을 접수했지만 아직 처리하지 않았다.

  • 203 Non-Authoritative Information (신뢰할 수 없는 정보) : 서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공하고 있다.

  • 204 No Content (내용 없음) : 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다.

3️⃣ 3xx Redirection (리디렉션, 경로 재지정)

리퀘스트 완료를 위해 추가 동작이 필요함. (클라이언트가 요청을 완료하기 위해 추가 조취를 취해야 함)

  • 301 Moved Permanently (영구적 이동) : 요청한 리소스의 URI가 변경되었음을 의미한다. 새로운 URI가 응답에서 주어질 수 있다.

  • 304 Not Modified (변경 없음) : 마지막 요청 이후 요청한 페이지는 수정되지 않았다. 서버가 이 응답을 표시하면 페이지의 콘텐츠를 표시하지 않는다. 요청자가 마지막으로 페이지를 요청한 후 페이지가 변경되지 않으면 이 응답을 표시하도록 서버를 구성해야 한다. 이것은 캐시를 목적으로 사용된다. 이것은 클라이언트에게 응답이 수정되지 않았음을 알려주며, 그러므로 클라이언트는 계속해서 응답의 캐시 된 버전을 사용할 수 있다.

  • 307 (임시 리다이렉션) : 어떤 페이지가 긴급점검을 하고 있어서 일시적으로 다른 페이지로 리다이렉트해야 할 경우에 이 응답코드를 받게된다. 이 응답을 받았다면 리다이렉트해야 할 페이지로 다시 요청을 하게 된다.

4️⃣ 4xx Client Error (클라이언트 오류)

클라이언트 요청을 처리할 수 없어 오류 발생함. (클라이언트로 인한 오류 발생)

  • 400 Bad Request (잘못된 요청) : 서버에서 필요로하는 어떤 정보를 클라이언트에서 잘못된 구문이나 문법으로 보낸 경우이다. 서버에서 필요로 하는 파라미터 값을 보내지 않았거나, 오타로 잘못된 값을 보내게되면 이 에러코드를 받게된다.

  • 401 Unauthorized (권한 없음) : 이 요청은 인증이 필요하다. 이 경우 클라이언트는 요청한 응답을 받기 위해 스스로를 인증해야 한다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음(Unauthorized)으로 되어 있지만 실제 뜻은 인증 안됨(Unauthenticated)에 더 가깝다.

  • 403 Forbidden(접근 금지) : 서버가 요청을 거부하고 있다. 사용자가 리소스에 대한 필요 권한을 갖고 있지 않기 때문. (401은 인증 실패, 403은 인가 실패라 보면 이해하기 편할 것이다.)

  • 404 Not Found (찾을 수 없음) : 서버가 요청한 페이지(Resource)를 찾을 수 없다. 클라이언트에서 요청한 페이지가 존재하지 않을 때의 코드이다. 따라서 페이지명을 잘못 입력했거나, 경로를 잘못 입력했을 때 그 자원을 찾을 수 없다면 이 에러코드를 받게된다.

  • 405 Method Not Allowed (허용되지 않은 메소드) : 클라이언트에서 요청한 HTTP 메서드를 서버에서 허용하지 않을 경우에 받게되는 응답이다. 우리는 보통 GET, POST와 같은 HTTP 메소드를 사용하는데, 간혹 DELETE 같은 보안상 위협이 되는 메소드는 서버에서 막고 있다. 따라서 이런 메소드를 통해 요청시 허용되지 않음을 알려주는 코드이다.

  • 408 Request Timeout (요청 시간 초과) : 서버의 요청 대기가 시간을 초과하였다.

5️⃣ 5xx Server Error (서버 오류)

서버에서 처리를 하지 못하여 오류 발생함. (서버가 유효한 요청을 명백하게 수행하지 못했음)

  • 500 (내부 서버 오류) : 서버에 오류가 발생하여 요청을 수행할 수 없다. 클라이언트의 요청에는 문제가 없으나 서버 내부에서 에러가 발생한 경우이다. 대표적으로 JSP파일에서 예외가 발생하거나, 문법적으로 오류가 있을 때 이 에러가 발생한다.

  • 501 (구현되지 않음) : 서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어 서버가 요청 메소드를 인식하지 못할 때 이 코드를 표시한다.

  • 502 Bad Gateway (불량 게이트웨이) : 서버가 게이트웨이나 프록시 역할을 하고 있거나, 업스트림 서버에서 잘못된 응답을 받았다.

  • 503 (서비스를 사용할 수 없음) : 서버가 오버로드되었거나 유지관리를 위해 다운되었기 때문에 현재 서버를 사용할 수 없는 상태이다. 급격하게 부하가 몰리거나, 서버가 임시 보수 중인 경우에 나타난다. (속된말로 서버가 터진 상황) 이는 대개 일시적인 상태이다.

  • 504 (게이트웨이 시간초과) : 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 제때 요청을 받지 못했다.

💡 요약

1xx, 2xx, 3xx까지는 정상적인 처리 또는 과정 및 정보를 뜻하는 반면,
4xx, 5xx 경우는 에러의 의미, 즉 어딘가 문제가 발생했음을 의미한다.

📚 Reference

profile
Bamboo Tree 🎋 : 대나무처럼 성장하고 싶은 개발자 Sony입니다.

2개의 댓글

comment-user-thumbnail
2023년 5월 23일

너무 유익한 글입니다. 좋댓구알 하고가요~

1개의 답글