HTTP 상태 코드

jkpapa·2023년 5월 11일
0

HTTP

목록 보기
5/5

HTTP 상태 코드(HTTP status code)는 클라이언트가 서버에게 요청을 보내고 서버가 그 요청에 대한 응답을 전송할 때, 클라이언트에게 전송되는 3자리 숫자로 이루어진 코드이다. 이 코드는 서버의 응답에 대한 상태나 성공, 실패 등의 정보를 나타내며, 클라이언트는 이 코드를 통해 서버의 응답을 쉽게 이해할 수 있다.

대표적인 HTTP 상태코드는 다음과 같은 세 자리 숫자로 이루어져 있다.

  • 2xx(Successful): 요청이 정상 처리된 상태
  • 3xx(Redirection): 요청을 완료하려면 추가 행동이 필요한 상태
  • 4xx(Client Error): 클라이언트에서 잘못된 문법 사용과 같은 문제로 서버가 요청을 수행할 수 없는 상태
  • 5xx(Server Error): 서버가 정상 요청을 처리하지 못한 상태

HTTP의 상태코드의 종류들을 좀 더 자세하게 알아보자.

2xx(Successful)

2xx코드는 클라이언트의 요청이 성공적으로 처리되었음을 나타내는 상태 코드이다. 이 상태 코드는 서버에서 클라이언트의 요청을 올바르게 수신하고 처리했을 때, 클라이언트에게 반환된다.

대표적으로 사용되는 HTTP 2xx코드는 다음과 같다.

  • 200 OK: 요청이 성공적으로 처리되었으며, 응답에 해당하는 리소스가 전송됨
  • 201 Created: 새로운 리소스가 성공적으로 생성되었으며, 그 리소스의 URI가 응답에 포함되어 있음
POST /members HTTP/1.1
Content-Type: application/json

{
  "username": "young",
  "age": 20
}
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 34
Location: /members/100

{
  "username": "young",
  "age": 20
}
  • 204 No Content: 요청이 성공적으로 처리되었지만 응답 본문에 보낼 데이터가 없음.
    • 예를 들어, 웹 문서 편집기의 경우 저장의 결과로 아무 내용이 없어도 괜찮다.

HTTP 2xx코드는 클라이언트가 서버에게 보낸 요청이 성공적으로 처리되었음을 나타내므로, 클라이언트는 요청 결과를 처리하고 다음 작업을 계속할 수 있다.

3xx(Redirection)

HTTP 3xx코드는 클라이언트가 요청한 리소스가 새로운 위치로 이동되었거나, 요청한 리소스의 URL이 변경되었음을 나타내는 코드이다. 이 상태코드는 리다이렉션을 수행할 때 사용된다.

리다이렉트는 일반적으로 브라우저에서 자동으로 처리되며 그 과정은 다음과 같다.

  • 클라이언트가 서버로 리소스 접근을 요청하고, 서버는 상태코드 3xx와 이동해야 하는 새로운 URL을 Location 헤더에 담아 응답한다.

  • 클라이언트는 3xx응답 결과에 Location 헤더가 포함되어 있으면, URL을 Location헤더에 저장된 위치로 이동한다.

  • 클라이언트는 이동된 URL로 서버에게 새로운 리소스를 요청하고, 서버는 이에 대해 응답한다.

그리고 HTTP 리다이렉션에는 영구 리다이렉션과 일시적 리다이렉션의 유형이 존재한다.

  1. 영구 리다이렉션
  • 클라이언트가 요청한 리소스의 URL이 완전히 변경되어, 새로운 URL로 클라이언틀르 영구적으로 리다이렉트한다.

  • 영구 리다이렉션은 웹 사이트의 URL이 변경되거나, 더 이상 존재하지 않는 페이지가 다른 페이지로 대체되는 경우에 주로 사용된다. 또한, 영구 리다이렉션은 검색 엔진에서도 URL의 변경을 인지 할 수 있다. 이 덕분에 기존의 검색 엔진 색인을 유지하면서 새로운 URL로의 이동을 가능하게 할 수 있다.

  1. 일시적 리다이렉션
  • 클라이언트가 요청한 리소스가 일시적으로 이동되어, 임시로 다른 URL로 클라이언트를 리다이렉트한다. 이 경우에는 검색 엔진 등에서도 원래 URL을 계속 사용한다.

  • 일시적 리다이렉션은 서버 유지보수 등으로 인해 일시적으로 페이지가 이동되어 사용자가 새로운 URL로 접근해야 할 때 주로 사용된다. 예를 들어, 웹 사이트가 일시적으로 점검을 진행할 경우 일시적 리다이렉션을 사용하여 사용자가 다른 URL로 접근하도록 안내하거나 쇼핑 페이지에서 주문 완료 후 주문 내역을 보여주는 페이지로 이동하게 할 수 있다.

리다이렉트를 위해 대표적으로 사용되는 HTTP 3xx코드는 다음과 같다.

  • 301 Moved Permanently, 308 Permanent Redirect: 요청한 리소스가 새로운 위치로 영구적으로 이동되었으며, 이후의 모든 요청은 새로운 URL로 전송되어야 한다.

  • 302 Found, 303 See Other, 307 Temporary Redirect : 요청한 리소스가 일시적으로 다른 위치에 있으며, 이후의 요청은 새로운 URL로 전송되어야 한다.

301과 302 같은 경우 리다이렉트 요청시 메서드가 GET으로 변하고, 본문이 제거될 가능성이 있다. 따라서 자동 리다이렉션이 되더라도 처음 요청 본문과 메소드를 유지하는 307, 308이 등장했다.

  • 304 Not Modified : 클라이언트에게 이전에 요청한 리소스가 수정되지 않았음을 알려준다. 이 상태 코드는 캐시된 리소스를 처리할 때 자주 사용된다. 이 상태 코드를 받으면, 클라이언트는 리소스가 수정되지 않았음을 인지하고 캐시에서 데이터를 가져온다.

3xx코드를 통해 클라이언트는 변경된 리소스를 찾을 수 있으며, 웹 서버는 리소스의 위치를 변경할 수 있다.

4xx(Client Error)

HTTP 4xx 코드는 클라이언트 측에서 발생한 오류를 나타내는 상태코드이다. 클라이언트의 요청을 처리할 수 없거나, 클라이언트가 잘못된 요청을 보낸 경우 등에 발생한다.

몇 가지 일반적인 4xx 코드는 다음과 같다.

  • 400 Bad Request: 클라이언트가 올바르지 않은 요청을 보낸 경우 발생한다. 예를 들어, 잘못된 요청 구문이나 잘못된 요청 본문 등이 포함되어 있는 경우 발생할 수 있다.

  • 401 Unauthorized: 클라이언트가 인증되지 않은 경우 발생한다. 예를 들어, 로그인하지 않은 사용자가 보호된 페이지에 접근하려고 할 때 발생할 수 있다.

    • 401오류 발생시 응답에 WWW-Authorized헤더와 함께 인증 방법을 설명한다.
  • 403 Forbidden: 클라이언트가 요청한 리소스에 대한 접근 권한이 없는 경우 발생한다. 예를 들어, 관리자 권한이 필요한 리소스에 일반 사용자가 접근하려고 할 때 발생할 수 있다.

  • 404 Not Found: 아주 익숙한 코드. 클라이언트가 요청한 리소스가 존재하지 않는 경우 발생한다. 예를 들어 올바른 URL을 입력하지 않았거나, 요청한 리소스가 삭제되었을 때 발생할 수 있다.

4xx코드 오류의 원인은 클라이언트가 잘못된 요청을 보내는 것이기 때문에 재시도를 해도 오류가 발생한다. 따라서 오류를 해결하려면 클라이언트 요청 자체를 수정해야 한다.

5xx(Server Error)

HTTP 5xx 코드는 서버 측에서 발생한 오류를 나타낸다. 이러한 코드는 클라이언트 요청에 대한 서버 응답 중 서버 측에서 오류가 발생한 경우이다.

  • 500 Internal Server Error: 서버에서 요청 처리 중에 오류가 발생한 경우이다. 이 오류는 일반적으로 서버에서 처리할 수 없는 예기치 않은 상황이 발생한 경우이다.

  • 502 Bad Gateway: 서버간 통신 중에 다른 서버로부터 잘못된 응답을 받은 경우 발생한다.

  • 503 Service Unavailable: 서버가 요청을 처리할 수 없는 경우 발생한다. 이 오류는 서버가 일시적인 과부화 또는 예정된 작업으로 잠시 요청을 처리할 수 없는 상태임을 나타낸다.

HTTP 상태코드는 클라이언트와 서버간의 통신에서 중요한 역할을 한다. 클라이언트는 서버로부터 받은 상태 코드를 분석하여 자신이 보낸 요청이 성공적으로 처리되었는지, 혹은 에러가 발생했는지 등의 정보를 파악할 수 있다.

0개의 댓글