들어가며
인터넷에서 정보를 주고받을 때, 사용하는 HTTP(하이퍼텍스트 전송 프로토콜)는 클라이언트와 서버 간의 통신에서 상태 코드(status code)를 사용하여 요청의 처리 결과를 나타냅니다.
상태 코드는 성공, 오류, 리디렉션 등 다양한 상황에 대한 응답을 제공하여, 웹 개발자들이 요청에 대한 적절한 처리를 할 수 있도록 돕습니다.
하지만 HTTP 상태 코드에 대해서는 많은 사람들이 몰라서 요청 실패 시 당황스러울 때가 많습니다. 따라서 오늘은 HTTP 상태 코드에 대해 알아보면서, 요청 실패 시에도 적절하게 대처할 수 있도록 자세히 알아보려 합니다.
100번대 상태 코드 - 정보성 응답, Informational responses
100 Continue
클라이언트가 요청을 보내고 서버가 이를 수신하여 처리 준비가 되었음을 나타냅니다. 이후 클라이언트는 추가적인 요청을 보낼 수 있습니다.
101 Switching Protocol
서버가 클라이언트의 요청에 따라 프로토콜을 전환하고 있음을 나타냅니다. 예를 들어, 클라이언트가 HTTP를 사용하고 있었는데 WebSocket으로 전환하게 되면 이 상태 코드가 반환됩니다.
102 Processing
서버가 요청을 받았으나 아직 요청을 처리 중이므로 클라이언트는 계속해서 요청을 보내야 함을 나타냅니다. 이 코드는 오랜 시간이 걸리는 요청의 경우에 사용됩니다.
103 Early Hints
서버가 요청에 대한 일부 응답(헤더 등)을 보냈으며, 이후에 전체 응답이 올 것임을 알려주는 코드입니다. 이 코드는 서버가 보내야 할 정보가 많은 경우, 브라우저가 렌더링 하는 동안에도 서버가 추가 정보를 보낼 수 있도록 하는 데 사용됩니다.
200번대 상태 코드 - 성공적인 응답, Successful responses
200 OK
요청이 성공적으로 처리되었음을 나타냅니다. 서버가 클라이언트에게 요청한 데이터를 정상적으로 반환한 경우에 이 코드가 반환됩니다.
201 Created
새로운 리소스가 성공적으로 생성되었음을 나타냅니다. 예를 들어, POST 요청으로 새로운 블로그 글을 작성한 경우 이 코드가 반환됩니다.
202 Accepted
요청이 수신되었으며, 이후에 처리될 것임을 나타냅니다. 예를 들어, 서버가 요청을 받았으나 아직 처리 중이므로 이 코드를 반환한 후에 처리를 계속할 수 있습니다.
203 Non-Authoritative Information
요청이 성공적으로 처리되었지만, 반환된 리소스가 다른 출처에서 수집되었을 경우에 이 코드가 반환됩니다.
204 No Content
요청이 성공적으로 처리되었지만, 반환할 데이터가 없을 경우에 이 코드가 반환됩니다. 예를 들어, DELETE 요청으로 리소스를 삭제한 경우에 이 코드가 반환됩니다.
205 Reset Content
요청이 성공적으로 처리되었고, 클라이언트의 뷰를 재설정해야 할 때 이 코드가 반환됩니다. 예를 들어, 클라이언트의 폼을 재설정하는 경우에 이 코드가 반환됩니다.
206 Partial Content
클라이언트가 리소스의 일부분만 요청한 경우, 이 코드가 반환됩니다. 예를 들어, 동영상 파일의 일부분만 요청한 경우에 이 코드가 반환됩니다.
300번대 상태 코드 - 리다이렉션 메시지, Redirection messages
300 Multiple Choices
클라이언트가 요청한 리소스가 여러 개의 위치에 있을 경우, 이 코드가 반환됩니다. 서버는 클라이언트에게 다른 리소스의 위치를 알려주는 응답 본문을 함께 전송해야 합니다.
301 Moved Permanently
요청한 리소스가 완전히 새로운 URL로 이동되었을 때, 이 코드가 반환됩니다. 이후에 클라이언트는 새로운 URL로 요청을 보내야 합니다. 서버는 응답 본문에 새로운 URL을 포함시켜야 합니다.
302 Found
요청한 리소스가 일시적으로 다른 URL로 이동되었을 때, 이 코드가 반환됩니다. 이후에 클라이언트는 새로운 URL로 요청을 보내야 합니다. 301과 마찬가지로 서버는 응답 본문에 새로운 URL을 포함시켜야 합니다.
303 See Other
클라이언트가 POST 요청을 보낸 후, 요청한 리소스가 다른 URL에 있을 때, 이 코드가 반환됩니다. 이후에 클라이언트는 GET 요청으로 새로운 URL을 요청해야 합니다. 이 코드는 리소스가 완전히 새로운 URL로 이동한 것이 아니라, 새로운 URL에서 새로운 리소스를 생성하는 경우에도 사용됩니다.
304 Not Modified
클라이언트가 이전에 받았던 리소스와 동일한 리소스를 요청했을 때, 이 코드가 반환됩니다. 이 경우에는 서버는 새로운 응답 본문을 반환하지 않고, 클라이언트에게 이전에 받았던 응답 본문을 그대로 사용할 것을 알려줍니다.
307 Temporary Redirect
요청한 리소스가 새로운 URL에 임시적으로 이동되었으며, 클라이언트가 새로운 URL을 사용하여 요청을 다시 시도해야 함을 나타냅니다. 기본적으로 302 상태 코드와 동일하지만, 서버가 클라이언트가 원래의 HTTP 메소드를 유지하도록 지시할 수 있다는 점에서 다릅니다. 이것은 웹 애플리케이션이 POST 요청을 처리하고, 사용자가 새로 고침을 클릭했을 때 중복 POST 요청을 방지하기 위해 유용할 수 있습니다. 웹 브라우저에게 캐시를 유지하도록 지시하지 않으므로, 새로운 요청은 항상 서버로 전송됩니다.
308 Permanent Redirect
요청한 리소스가 완전히 새로운 URL로 이동되었을 때, 이 코드가 반환됩니다. 이후에 클라이언트는 새로운 URL로 요청을 보내야 합니다. 301과 마찬가지로 서버는 응답 본문에 새로운 URL을 포함시켜야 합니다. 그러나, 308은 클라이언트가 캐시 된 이전 응답을 사용하지 않도록 보장하기 위해 사용됩니다.
400번대 상태 코드 - 클라이언트 에러, Client error responses
400 Bad Request
클라이언트 측에서 전송한 요청이 잘못되었거나, 서버가 요청을 이해하지 못할 때 반환됩니다. 일반적으로, 이 코드는 요청 본문이 유효하지 않거나, 필수 요청 매개변수가 누락된 경우, 또는 올바르지 않은 요청 메서드가 사용된 경우에 반환됩니다.
401 Unauthorized
클라이언트가 인증되지 않은 상태에서 보호된 리소스에 접근하려고 할 때 반환됩니다. 이 코드는 일반적으로 로그인이 필요한 페이지에 대한 액세스를 시도할 때 반환됩니다. 서버는 일반적으로 응답 본문에 클라이언트가 인증을 수행하기 위해 필요한 정보를 포함시킵니다.
402 Payment Required
이 상태 코드는 현재 HTTP/1.1 명세에서는 사용되지 않지만, 과거에는 인터넷상에서의 결제를 위해 사용되었습니다.
403 Forbidden
클라이언트가 요청한 리소스에 대한 액세스 권한이 없는 경우 반환됩니다. 이 코드는 401 Unauthorized와 달리, 인증 자격 증명이 잘못되었는지 아니면 권한이 부여되지 않았는지 구별하지 않습니다.
404 Not Found
클라이언트가 요청한 리소스를 찾을 수 없을 때 반환됩니다. 이 코드는 주로 URL이 올바르지 않은 경우, 존재하지 않는 리소스를 요청한 경우, 또는 서버 측에서 요청한 리소스를 찾을 수 없는 경우에 반환됩니다.
405 Method Not Allowed
클라이언트가 요청한 HTTP 메서드가 지원되지 않을 때 반환됩니다. 예를 들어, GET 요청을 처리할 수 있는 리소스에 대해 POST 요청이 전송되는 경우, 이 코드가 반환됩니다.
406 Not Acceptable
클라이언트가 Accept 요청 헤더 필드에 지정한 타입의 데이터를 서버가 제공하지 않을 때 반환됩니다.
407 Proxy Authentication Required
클라이언트가 프록시 서버에 요청을 보낼 때 인증이 필요한 경우 반환됩니다.
408 Request Timeout
클라이언트가 서버로부터 응답을 받기까지의 시간이 너무 오래 걸렸을 때 반환됩니다. 일반적으로 이 코드는 서버 측의 부하나 느린 네트워크 연결 때문에 발생합니다.
409 Conflict
클라이언트가 요청한 리소스와 충돌이 발생한 경우 반환됩니다. 예를 들어, 두 클라이언트가 동시에 같은 리소스를 수정하려고 할 때 이 코드가 반환됩니다.
410 Gone
클라이언트가 요청한 리소스가 이전에 존재했지만 더 이상 사용되지 않는 경우 반환됩니다. 이 코드는 일반적으로 더 이상 존재하지 않는 웹 페이지에 대한 요청에 대해 반환됩니다.
411 Length Required
클라이언트가 요청 본문의 길이를 지정하지 않은 경우 반환됩니다. 일반적으로 POST 요청과 함께 전송되는 데이터의 크기를 지정하지 않았을 때 이 코드가 반환됩니다.
412 Precondition Failed
서버가 클라이언트의 요청을 수행하기 전에 필요한 조건이 충족되지 않은 경우 반환됩니다. 이 코드는 일반적으로 If-Match 또는 If-None-Match 요청 헤더 필드가 잘못된 경우에 반환됩니다.
413 Payload Too Large
클라이언트가 서버로 전송한 요청 본문의 크기가 서버에서 처리할 수 있는 한계를 초과한 경우 반환됩니다.
414 URI Too Long
클라이언트가 요청한 URI가 너무 긴 경우 반환됩니다. 이 코드는 일반적으로 긴 쿼리 문자열 또는 긴 URI 매개변수가 포함된 요청에 대해 반환됩니다.
415 Unsupported Media Type
클라이언트가 서버가 지원하지 않는 요청 본문 형식을 사용한 경우 반환됩니다. 이 코드는 일반적으로 클라이언트가 지원하지 않는 미디어 타입을 사용한 경우에도 반환됩니다.
416 Range Not Satisfiable
클라이언트가 Range 요청 헤더 필드를 지정하였지만, 서버에서 해당 범위를 만족시킬 수 없는 경우 반환됩니다.
417 Expectation Failed
클라이언트가 Expect 요청 헤더 필드를 지정하였지만, 서버에서 해당 요구 사항을 수행할 수 없는 경우 반환됩니다.
418 I'm a teapot
이 코드는 HTTP/1.1 명세에서는 개그로 포함되어 있지만, 실제로는 거의 사용되지 않습니다. 이 코드는 "티포트입니다"라는 의미로, 서버가 커피 포트 대신에 티포트로 동작하는 경우 반환됩니다.
419 Authentication Timeout
클라이언트의 인증이 만료되었을 때 반환됩니다. 일반적으로 인증 토큰이 만료된 경우 이 코드가 반환됩니다.
421 Misdirected Request
이 코드는 요청이 서버에서 처리되지 않았으며 다른 서버로 전달되어야 함을 나타냅니다. 예를 들어, HTTPS 요청이 HTTP 서버로 전달되는 경우 이 코드가 반환됩니다.
422 Unprocessable Entity
클라이언트가 유효하지 않은 데이터를 서버로 전송한 경우 반환됩니다. 이 코드는 일반적으로 REST API에서 입력 데이터 유효성 검사에 실패한 경우에 반환됩니다.
423 Locked
서버에서 요청한 리소스가 잠겨 있어 요청이 실패한 경우 반환됩니다. 이 코드는 일반적으로 다중 사용자 환경에서 동시에 리소스에 접근할 때 사용됩니다.
424 Failed Dependency
이 코드는 요청이 다른 요청의 결과에 종속되어 실패한 경우 반환됩니다. 예를 들어, 클라이언트가 파일을 다운로드하기 전에 해당 파일이 서버에 생성되어 있어야 하는 경우 이 코드가 반환됩니다.
426 Upgrade Required
서버가 클라이언트에게 새 버전의 프로토콜을 사용해야 함을 나타내는 경우 반환됩니다. 예를 들어, HTTP/1.1 클라이언트가 HTTP/2 서버에 요청하는 경우 이 코드가 반환됩니다.
428 Precondition Required
클라이언트가 요청을 수행하기 전에 특정 조건을 충족해야 하는 경우 반환됩니다. 이 코드는 일반적으로 If-Match 또는 If-Unmodified-Since 요청 헤더 필드가 누락된 경우에 반환됩니다.
429 Too Many Requests
클라이언트가 지정된 시간 동안 너무 많은 요청을 보낸 경우 반환됩니다. 이 코드는 서버에 대한 과부하를 방지하기 위해 사용됩니다.
431 Request Header Fields Too Large
클라이언트 요청 헤더 필드의 크기가 서버에서 처리할 수 있는 한계를 초과한 경우 반환됩니다.
451 Unavailable For Legal Reasons
이 코드는 웹 사이트 또는 웹 페이지가 법적으로 차단된 경우 반환됩니다. 이 코드는 일반적으로 저작권 침해나 성적 취향을 자극하는 콘텐츠와 같은 불법 콘텐츠에 대한 접근 제한에 사용됩니다.
500번대 상태 코드 - 서버 에러, Server error responses
500 Internal Server Error
에러는 서버가 요청을 처리하는 동안 내부 오류가 발생한 경우 발생합니다. 이 오류는 서버에 문제가 발생하여 클라이언트 요청을 처리할 수 없는 경우에 발생합니다.
501 Not Implemented
에러는 서버가 요청된 작업을 수행할 수 없는 경우 반환됩니다. 이 오류는 서버에 지원되지 않는 HTTP 메소드를 사용하여 요청을 보낸 경우에 발생할 수 있습니다.
502 Bad Gateway
에러는 서버가 게이트웨이나 프록시 역할을 수행하는 서버로부터 잘못된 응답을 받은 경우에 발생합니다. 이 오류는 클라이언트와 서버 간의 통신에 문제가 있거나, 프록시 서버에서 오류가 발생한 경우에도 발생할 수 있습니다.
503 Service Unavailable
에러는 서버가 일시적으로 요청을 처리할 수 없는 경우에 반환됩니다. 이 오류는 서버 부하가 매우 높은 경우, 유지 보수 작업을 수행하는 경우 등 서버가 일시적으로 요청을 처리할 수 없는 경우에 발생합니다.
504 Gateway Timeout
에러는 서버가 게이트웨이나 프록시 역할을 수행하는 서버와의 연결 시간이 초과된 경우에 발생합니다. 이 오류는 서버와 프록시 서버 간의 통신에 문제가 있는 경우에 발생할 수 있습니다.
505 HTTP Version Not Supported
에러는 서버가 요청된 HTTP 프로토콜 버전을 지원하지 않는 경우 반환됩니다. 이 오류는 클라이언트가 지원하지 않는 HTTP 프로토콜 버전을 사용하여 요청을 보낸 경우에 발생할 수 있습니다.
506 Variant Also Negotiates
에러는 서버가 클라이언트에게 여러 가지 리소스 옵션 중에서 하나를 선택하도록 요청하는 경우 반환됩니다. 이 오류는 서버가 클라이언트의 요청에 대해 여러 가지 응답을 제공할 수 있는 경우 발생할 수 있습니다.
507 Insufficient Storage
에러는 서버에 저장 공간이 부족한 경우 반환됩니다. 이 오류는 서버에 대한 저장 공간이 부족하여 클라이언트 요청을 처리할 수 없는 경우에 발생할 수 있습니다.
508 Loop Detected
에러는 서버가 요청된 리소스에 대한 무한 루프를 탐지한 경우 반환됩니다. 이 오류는 서버가 클라이언트 요청에 대해 무한히 리디렉션 하는 경우에 발생할 수 있습니다.
509 Bandwidth Limit Exceeded
에러는 서버가 클라이언트의 요청에 대한 대역폭 한도를 초과한 경우 반환됩니다. 이 오류는 서버가 특정 클라이언트나 IP 주소에 대해 대역폭 제한을 설정한 경우에 발생할 수 있습니다.
510 Not Extended
에러는 서버가 클라이언트 요청에 대한 추가 확장이 필요한 경우 반환됩니다. 이 오류는 서버가 요청된 메소드나 헤더 필드를 지원하지 않아 클라이언트 요청에 추가 확장이 필요한 경우에 발생할 수 있습니다.
511 Network Authentication Required
에러는 클라이언트가 네트워크 리소스에 대한 인증이 필요한 경우 반환됩니다. 이 오류는 서버가 클라이언트가 네트워크 리소스에 대한 인증을 받지 않은 경우에 발생할 수 있습니다. 예를 들어, 서버에서 Wi-Fi 라우터에 연결된 사용자에게만 인증을 요구하는 경우가 있습니다.
정리
상태 코드는 3자리 숫자로 이루어져 있으며, 첫 번째 숫자에 따라 5가지 범주로 나뉩니다. 이중 첫 번째 숫자가 4와 5인 경우는 정상동작하는 상황이 아니기 때문에 개발자의 대처가 필요한 경우들입니다.
- 1xx (Informational) : 요청을 받았으며 처리 중임을 나타냅니다.
- 2xx (Successful) : 요청이 성공적으로 처리되었음을 나타냅니다.
- 3xx (Redirection) : 요청을 완료하려면 추가 작업이 필요함을 나타냅니다.
- 4xx (Client Error) : 클라이언트의 잘못된 요청을 나타냅니다.
- 5xx (Server Error) : 서버의 오류를 나타냅니다.
대표적인 상태 코드
- 200 OK : 요청이 성공적으로 처리되었음을 나타냅니다.
- 404 Not Found : 요청한 페이지나 리소스를 찾을 수 없음을 나타냅니다.
- 500 Internal Server Error : 서버 내부 오류가 발생하여 요청을 처리할 수 없음을 나타냅니다.
마치며
HTTP 상태 코드는 1xx, 2xx, 3xx, 4xx, 5xx로 구성되며, 각각 다양한 상황에 대한 응답을 제공합니다.
1xx는 정보성 응답을 제공하며, 2xx는 성공적으로 처리된 경우, 3xx는 리디렉션, 4xx는 클라이언트 오류, 5xx는 서버 오류에 대한 응답을 제공합니다.
클라이언트와 서버 간의 통신에서 상태 코드는 매우 중요한 역할을 합니다. 이러한 상태 코드를 이해하고, 적절한 대처를 할 수 있다면 웹 개발자로서 더욱 능숙한 통신을 할 수 있을 것입니다. 이 글이 상태 코드에 대한 이해와 대처에 도움이 되길 바랍니다.
Reference
ChatGPT
'PROGRAMMING > CS' 카테고리의 다른 글
[CS] HTTP Method ( http 요청 메서드 정리 ) (19) | 2023.04.09 |
---|---|
[CS] 함수(Function)와 메서드(Method) 간단하고 정확하게 알아가기 (feat. Javascript) (26) | 2023.03.25 |
[CS] 블로킹과 논블로킹 그리고 동기와 비동기 (feat.Javascript) (36) | 2023.03.21 |
[CS] 함수형 프로그래밍의 특징(feat.Javascript) (36) | 2023.03.13 |
[CS] Argument와 Parameter의 차이 쉽게 이해하기 (feat. 인수 / 인자 / 매개변수 용어 정리) (36) | 2023.03.09 |