탑신병자 듀오 팀 티모입니다.
이번 시간에는 HTTP 상태 코드에 대해 알아보겠습니다.
HTTP는 웹 서버-클라이언트 간 데이터를 주고받기 위해 사용하는 통신 방식이며 TCP/IP 프로토콜로 동작합니다.
웹을 이용하려면 웹 서버와 클라이언트는 각각 TCP/IP 동작에 필수적인 IP 주소를 가져야 하며,
HTML이나 XML과 같은 하이퍼텍스트뿐 아니라 이미지, 음성, 동영상, PDF와 각종 문서 파일 등 컴퓨터에서 다룰 수 있는 데이터라면 무엇이든 전송할 수 있다는 특징이 있습니다.
클라이언트와 서버 간 HTTP 연결 후, 클라이언트가 서버에 HTTP 요청 메시지를 보내면 서버는 요청에 따른 처리를 진행한 후에 그 결과를 클라이언트에 HTTP 응답 메시지로 보냅니다.
이 요청 메시지와 응답 메시지가 반복적으로 오가며 웹을 사용할 수 있게 됩니다.
이 때 서버에서의 처리 결과는 응답 메시지의 상태 라인에 있는 상태 코드(status code)를 보고 파악할 수 있습니다.
상태 코드는 세 자리 숫자로 되어 있습니다.
첫 자리는 HTTP 응답의 종류를 구분하는 데 사용하며 뒤 2자리 숫자는 세부적인 응답 내용 구분을 위한 번호입니다.
현재 100~500번 대까지 상태 코드가 정의되어 있으며 크게 5가지로 분류해서 사용하고 있습니다.
- 1XX: Informational(정보 제공)
임시 응답으로 현재 클라이언트의 요청까지는 처리되었다는 의미입니다. - 2XX: Success(성공)
클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미입니다. - 3XX: Redirection(리다이렉션)
완전한 처리를 위해서 추가 동작이 필요한 경우입니다.
주로 서버의 주소 또는 요청한 URI의 웹 문서가 이동되었으니 그 주소로 다시 시도하라는 의미입니다. - 4XX: Client Error(클라이언트 에러)
잘못 구성되었거나 존재하지 않는 페이지를 요청하는 등 클라이언트의 요청이 잘못된 경우를 의미합니다. - 5XX: Server Error(서버 에러)
서버 사정으로 메시지 처리에 문제가 발생한 경우입니다.
각 코드를 보다 상세하게 알아보겠습니다.
100 | Continue | 클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 이어서 보내도 됨을 의미합니다. |
101 | Switching Protocols | 서버가 프로토콜을 전환 중임을 의미합니다. |
102 | Processing | 서버가 아직 요청을 처리중이라 응답을 제대로 알려줄 수 없는 상태입니다. |
103 | Early Hints | 웹페이지에 필요한 리소스에 대한 힌트를 제공해 리소스를 사전 로드하여 로딩을 빠르게 해줍니다. |
200 | OK | 클라이언트의 요청을 서버가 정상적으로 처리했음을 의미합니다. 주로 GET 요청에 대한 응답입니다. |
201 | Created | 클라이언트의 요청을 서버가 정상적으로 처리했고, 새로운 리소스가 생김을 의미합니다. 주로 POST 요청에 대한 응답입니다. |
202 | Accepted | 클라이언트 요청은 정상이지만, 서버가 아직 처리를 완료하지 않음을 의미합니다. 배치 처리와 같이 요청 후 일정 시간이 지난 후에 이를 처리하는 경우의 응답입니다. |
203 | Non-Authoritative Information | 요청이 성공적으로 수행되었지만 검증이 되지 않음을 의미합니다. 웹사이트가 프록시 서버(CDN, VPN 등)를 사용할 때 반환되는 상태 코드이기도 합니다. |
204 | No Content | 클라이언트의 요청은 정상적이지만, 응답으로 제공할 컨텐츠가 없음을 의미합니다. Delete 요청에 대한 응답으로 사용됩니다. |
205 | Reset Content | 서버가 요청을 성공적으로 처리했지만, 콘텐츠를 표시하지 않는 상태입니다. 클라이언트 쪽에서 콘텐츠를 재설정할 것을 요구합니다.(브라우저 새로 고침 등) |
206 | Partial Content | 서버가 리소스 범위의 일부 부분만 반환함을 의미합니다. (GET 요청의 일부만 성공적으로 처리했음) |
300 | Multiple Choices | 요청에 대해 하나 이상의 리소스가 존재함을 의미합니다. |
301 | Moved Permanently | 요청한 리소스의 URL이 변경되었음을 의미합니다. 특정 리소스 URL이 영구적으로 이동되며 HTTP 메서드가 GET으로 바뀝니다. |
302 | Found | 요청한 리소스의 URL이 일시적으로 변경되었음을 의미합니다. 특정 리소스의 URL이 일시적으로 이동되며 HTTP 메서드가 GET으로 바뀝니다. |
303 | See Other | 요청한 리소스를 다른 URL에서 GET 요청을 통해 얻어야 함을 의미합니다. |
304 | Not Modified | 리소스가 수정되지 않음을 의미합니다. 해당 응답을 받으면 클라이언트는 서버로부터 리소스를 재전송받지 않고 캐싱된 리소스를 사용합니다. |
307 | Temporary Redirect | 302와 유사하며, 클라이언트는 HTTP 메서드를 유지한 채 요청을 재송신할 필요가 있음을 의미합니다. |
308 | Permanent Redirect | 301 유사하며, 클라이언트는 HTTP 메서드를 유지한 채 요청을 재송신할 필요가 있음을 의미합니다. |
400 | Bad Request | 잘못된 문법 등으로 인해 클라이언트가 올바르지 못한 요청을 보냈음을 의미합니다. |
401 | Unauthorized | 인증되지 않은 사용자가 인증이 필요한 리소스를 요청하는 경우의 응답입니다. 보통 로그인이 필요한 API를 비로그인 사용자가 호출했을 때 사용됩니다. |
403 | Forbidden | 클라이언트가 콘텐츠에 접근할 권한을 갖고 있지 않음을 의미합니다. 주로 특정 IP, 국가가 차단되어 있는 사이트에 접속을 시도한 경우 사용됩니다. |
404 | Not Found | 클라이언트가 요청한 리소스가 존재하지 않음을 의미합니다. 인증되지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신 이 응답을 전송하기도 합니다. |
405 | Method Not Allowed | 현재 리소스에 맞지 않는 메서드를 사용했음을 의미합니다. |
408 | Request Timeout | 요청에 응답하는 시간이 너무 오래 걸림을 의미합니다. |
409 | Conflict | 요청이 현재 서버 상태와 충돌함을 의미합니다. |
412 | Preconditon Failed | 서버가 클라이언트의 사전 조건부 요청을 실패한 경우입니다. |
413 | Payload Too Large | 요청이 너무 커 서버가 처리할 수 없음을 의미합니다. |
429 | Too many Requests | 클라이언트가 지정된 시간 내 너무 많은 요청을 보낸 경우입니다. |
500 | Internal Server Error | 서버 내부에 오류가 발생하여 응답할 수 없음을 의미합니다. |
501 | Not Implemented | 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미합니다. |
502 | Bad Gateway | 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미합니다. 보통 접속량 증가로 인해 과부하 상태 등으로 서버에 통신 장애가 발생했을 경우에 나타납니다. |
503 | Service Unavailable | 서버가 요청을 처리할 준비가 되지 않음을 의미합니다. 유지 보수나 과부하 등의 이유로 일시적으로 이용 불가한 상태입니다. |
504 | Gateway Timeout | 서버에서 게이트웨이 역할을 하고 있으며, 한 서버가 액세스 하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미합니다. |
HTTP 상태 코드에 대해 알아보았습니다.
감사합니다.
'Programming' 카테고리의 다른 글
정규표현식 활용 (1) | 2024.01.21 |
---|---|
[Mybatis] For input string 에러 (1) | 2024.01.17 |
Spring Boot Model validation 관련 애노테이션 (0) | 2024.01.12 |
Overloading과 Overriding의 차이 (1) | 2024.01.05 |
LLM 이란? (1) | 2024.01.05 |
댓글