HTTP 응답코드

송윤재·2024년 9월 23일

📌HTTP 응답코드란?

웹 서버가 클라이언트(브라우저 등) 요청에 대한 결과를 나타내는 3자리 숫자로 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 각 코드는 특정 의미를 가지며, 주로 5개의 그룹으로 나누어집니다.

👂1XX 정보응답

요청이 수신되었고 처리가 진행 중임을 나타냅니다.

  • 100 Continue
    • 클라이언트로부터 일부 요청을 받았고 나머지 요청을 받을 준비가 됐음을 나타냅니다.
  • 101 Switching Protocol
  • 102 Processing
  • 103 Early Hints

👌2XX 성공 응답

요청이 성공적으로 처리되었음을 나타냅니다.

  • 200 OK
    • 요청이 성공적으로 되었음을 나타냅니다.
    • 성공의 의미는 HTTP 메소드에 따라 달라집니다.
      • GET : 리소스를 불러와서 메시지 바디에 전송되었습니다.
      • HEAD: 개체 해더가 메시지 바디에 있습니다.
      • PUT 또는 POST: 수행 결과에 대한 리소스가 메시지 바디에 전송되었습니다.
      • TRACE: 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있습니다.
  • 201 Created
    • 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다.
    • 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다.
  • 202 Accepted
  • 203 Non-Authoritative Information
  • 204 No Content
    • 요청에 대해서 보내줄 수 있는 콘텐츠가 없지만, 헤더는 의미있을 수 있습니다.
    • 사용자-에이전트는 리소스가 캐시된 헤더를 새로운 것으로 업데이트 할 수 있습니다.
  • 205 Reset Content
  • 206 Partial Content

👈3XX 리다이렉션 메시지

클라이언트가 요청한 리소스의 위치가 변경되었음을 나타냅니다.

  • 300 Multiple Choice
  • 301 Moved Permanently
    • 요청한 리소스의 URI가 변경되었음을 의미합니다.
  • 302 Found
    • 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다.
  • 303 See Other
  • 304 Not Modified

🙅‍♂️4XX 클라이언트 오류

요청에 오류가 있음을 나타냅니다.

  • 400 Bad Request
    • 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미합니다.
  • 401 Unauthorized
    • 지정한 리소스에 대한 액세스 권한이 없음을 의미합니다.
    • 응답 헤더 WWW-Authenticate에 필요한 인증 방식을 지정합니다.
  • 403 Forbidden
    • 클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않습니다.
    • 서버는 거절을 위한 적절한 응답을 보냅니다.
  • 404 Not Found
    • 서버는 요청받은 리소스를 찾을 수 없습니다.
    • 브라우저에서는 알려지지 않은 URL을 의미합니다.
    • 인증받지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신에 전송할 수도 있습니다.
  • 405 Method Not Allowed
  • 408 Request Timeout

👩‍💻5XX 서버 오류

서버에서 처리 중 오류가 발생했음을 나타냅니다.

  • 500 Internal Server Error
    • 서버에서 예상치 못한 오류가 발생했습니다.
    • 클라이언트가 모르는 5XX 계열의 응답 코드가 반환된 경우에도 클라이언트는 500과 동일하게 처리하도록 규정하고 있습니다.
  • 501 Not Implemented
  • 502 Bad Gateway
    • 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음을 의미합니다.
  • 503 Service Unavailabe
  • 504 Gateway Timeout
    • 서버가 게이트웨이 역할을 하고 있으며 적시에 응답을 받을 수 없을 때 주어집니다.

📌401(Unauthorized)와 403(Forbidden)의 차이

HTTP 응답 코드 401 Unauthorized403 Forbidden은 모두 요청이 거부되었음을 나타내지만, 그 이유와 상황이 다릅니다.

401 Unauthorized

  • 의미 : 요청한 리소스에 접근하기 위해 인증이 필요하며, 클라이언트가 아직 인증되지 않았거나 잘못된 인증 정보를 제공했을 때 사용됩니다.
  • 사용 예시 : 클라이언트가 인증되지 않은 상태에서 인증이 필요한 페이지에 접근하려고 할 때 발생. 예를 들어, 로그인이 필요한 페이지에 비로그인 상태로 접근 시 반환됩니다.
  • 특징 : 서버는 클라이언트가 인증할 수 있는 방법을 명시할 수 있습니다. 예를 들어, WWW-Authenticate 헤더를 통해 인증 방식을 제시할 수 있습니다.

403 Forbidden

  • 의미 : 클라이언트의 인증 여부와 상관없이, 요청이 허가되지 않았으며 클라이언트에게 접근 권한이 없음을 나타냅니다.
  • 사용 예시 : 클라이언트가 인증되었더라도, 특정 리소스에 접근할 권한이 없을 때 발생. 예를 들어, 로그인한 사용자가 관리자 권한이 필요한 페이지에 접근하려 할 때 반환됩니다.
  • 특징 : 추가적인 인증이나 권한 부여를 시도해도 접근이 불가능함을 의미합니다.

정리

  • 401 Unauthorized와 다르게 403 Forbidden에서는 서버가 클라이언트가 누구인지 알고 있다는 차이가 있습니다.

📌200(OK)와 201(Created)의 차이

200 OK201 Created는 둘 다 요청이 성공적으로 처리되었음을 나타내지만, 주된 차이점은 처리된 결과의 성격에 있습니다.

200 OK

  • 의미 : 요청이 성공적으로 처리되었고, 결과로 어떠한 리소스도 새로 생성되지 않았을 때 사용됩니다.
  • 사용 예시 : GET 요청으로 데이터를 성공적으로 조회하거나, 기존 리소스를 성공적으로 업데이트했을 때 반환됩니다.

201 Created

  • 의미 : 요청이 성공적으로 처리되었으며, 그 결과 새로운 리소스가 생성되었음을 나타냅니다.
  • 사용 예시 : POST 요청으로 서버에 새로운 데이터를 생성하거나 파일 업로드 시 새로운 리소스가 생성되었을 때 반환됩니다.
  • 특징 : 201 응답에는 새로 생성된 리소스의 URL을 포함하는 Location 헤더가 함께 반환될 수 있습니다.

정리

  • 200 OK는 기존 리소스에 대한 성공적인 처리
  • 201 Created는 새로운 리소스가 생성된 상황에서 사용됩니다.

📌응답코드를 직접 정의 할 수 있을까? YES!

HTTP 응답 코드는 기본적으로 표준화된 상태 코드를 사용하지만, 필요에 따라 사용자 정의 응답 코드를 만들 수 있습니다. 하지만 주의할 점은, 클라이언트와 서버 간의 통신에서 잘 알려진 표준 응답 코드를 사용하는 것이 상호 운용성과 예측 가능한 동작을 보장하기 때문에 권장됩니다.

그럼에도 불구하고, 웹 애플리케이션의 특정 요구사항에 맞춰 추가적인 의미를 전달해야 할 경우에는 표준 상태 코드의 범주 안에서 사용자 정의 코드를 사용하거나, 기존 상태 코드에 추가 메시지를 첨부하는 방식으로 응답을 처리할 수 있습니다.

사용자 정의 응답 코드를 사용하는 방법

  • 기존 범주의 상태 코드를 확장 : 예를 들어, 4xx5xx는 각각 클라이언트와 서버 오류를 나타내는 범주이므로, 499와 같이 사용하지 않는 코드를 정의하여 특정 오류를 표현할 수 있습니다.

    • 499 Client Closed Request : 일부 웹 서버(예: Nginx)에서 사용되는 코드로, 클라이언트가 서버 응답을 기다리지 않고 연결을 끊었을 때 사용됩니다.
  • 상태 코드와 함께 추가 메시지 전달 : 새로운 상태 코드를 정의하지 않고, 기존 코드에 의미 있는 응답 메시지를 첨부하는 방식이 더 일반적입니다. 예를 들어, 400 Bad Request 코드를 사용하면서 상세한 오류 원인을 응답 바디나 헤더에 추가할 수 있습니다.

    • 400 Bad Request + "Invalid API key"
  • REST API에서의 커스텀 상태 : RESTful API에서는 일반적으로 표준 HTTP 상태 코드를 사용하지만, 응답 바디에 특정 오류나 상태 메시지를 포함해 추가 정보를 전달하는 방식이 많이 쓰입니다.

    • 400 Bad Request와 함께 {"error_code": 1234, "message": "Invalid input data"}와 같이 응답할 수 있습니다.

권장 사항

  • 기존 상태 코드 사용 : 표준 코드의 의미를 벗어나지 않는 범위에서 사용하는 것이 좋습니다. 예를 들어, 400, 404, 500 등 이미 정의된 상태 코드를 최대한 활용하고, 세부 사항은 응답 바디에서 처리하는 방식으로 접근하는 것이 일반적입니다.
  • 사용자 정의 코드의 주의점 : 표준화되지 않은 코드를 남발하면, 다른 클라이언트나 서비스와의 호환성 문제가 발생할 수 있습니다.

출처

https://hongong.hanbit.co.kr/http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%ED%91%9C-1xx-5xx-%EC%A0%84%EC%B2%B4-%EC%9A%94%EC%95%BD-%EC%A0%95%EB%A6%AC/
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
https://mangkyu.tistory.com/146

profile
CS 공부를 해봅시다

0개의 댓글