티스토리 뷰

목 차

1. HTTP 상태 코드란?

2. 주요 HTTP 상태 코드

- 1XX 코드

- 2XX 코드

- 3XX 코드

- 4XX 코드  

- 5XX 코드

 

3. 결론 및 Q&A

 

1. HTTP 상태 코드란?

HTTP(Hypertext Transfer Protocol) 상태 코드는 웹 서버가 클라이언트에게 전송하는 메시지입니다. 이 코드들은 클라이언트에게 요청이 성공했는지, 실패했는지, 혹은 추가 동작이 필요한지를 알려줍니다. 이 아티클에서는 주요한 HTTP 상태 코드들에 대해 알아보겠습니다.

 

HTTP 상태 코드는 3자리 숫자로 구성되어 있습니다. 첫 번째 숫자는 상태 코드의 범주를 나타내며, 나머지 두 개의 숫자는 세부적인 상태를 표현합니다. 상태 코드는 클라이언트의 요청을 처리한 후 웹 서버가 전송하는 응답 메시지의 일부입니다. 이 코드들은 웹 개발자에게 문제를 해결하고 디버깅하는 데 도움을 줍니다.

 

2. 주요 HTTP 상태 코드

- 1xx - 정보

1xx 상태 코드는 요청이 받아들여졌음을 나타냅니다. 이러한 상태 코드는 클라이언트에게 추가적인 정보를 제공하거나 요청이 계속되고 있음을 알려줍니다. 예를 들어, 100 (Continue) 상태 코드는 클라이언트에게 요청이 계속되고 있으며, 추가 데이터를 전송해야 함을 알립니다.

 

100 Continue

진행 중임을 의미하는 응답코드입니다. 현재까지의 진행상태에 문제가 없으며, 클라이언트가 계속해서 요청을 하거나 이미 요청을 완료한 경우에는 무시해도 되는 것을 알려줍니다.

 

101 Switching Protocol

101은 클라이언트에 의해 보낸 업그레이드 요청 헤더에 대한 응답으로 보내집니다.

이 응답 코드는 클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답에 들어가며, 서버에서 프로토콜을 변경할 것임을 알려줍니다. 해당 코드는 Websocket 프로토콜 전환 시에 사용됩니다.

 

102 Processing(WebDAV)

이 응답 코드는 서버가 요청을 수신하였으며 이를 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음을 알려줍니다.

- 2xx - 성공

2xx 상태 코드는 클라이언트의 요청이 성공적으로 처리되었음을 나타냅니다. 가장 잘 알려진 상태 코드인 200 (OK)는 요청이 성공적으로 처리되었음을 나타냅니다. 다른 예로는 201 (Created) 상태 코드는 새로운 리소스가 성공적으로 생성되었음을 나타내며, 204 (No Content) 상태 코드는 요청이 성공했지만 응답에 별도의 콘텐츠가 없음을 나타냅니다.

 

200 OK

요청이 성공적으로 처리되었고, 요청에 따른 응답으로 정보가 반환됩니다.

 

201 Created

요청이 성공적으로 처리되었고, 새로운 리소스가 생성되었음을 나타냅니다. 주로 POST 요청 또는 일부 PUT 요청 이후에 사용됩니다.

 

202 Accepted

요청을 수신했지만 즉시 처리할 수 없음을 나타냅니다. 이 응답은 후속적으로 비동기 응답을 통해 요청 처리 결과를 전달할 때 사용됩니다.

 

203 Non-Authoritative Information

받은 메타 정보가 오리진 서버의 것과 일치하지 않지만 로컬 또는 서드 파티에서 수집된 것임을 나타냅니다. 이 경우 200 OK 응답보다는 해당 응답이 우선됩니다.

 

204 No Content

요청에 대해 반환할 수 있는 콘텐츠가 없지만, 의미 있는 헤더 정보는 포함될 수 있습니다. 사용자 에이전트는 캐시된 헤더를 업데이트할 수 있습니다.

 

205 Reset Content

요청을 완료한 후 사용자 에이전트에게 해당 문서 뷰를 리셋하라는 신호를 전달합니다.

 

206 Partial Content

클라이언트가 범위 헤더를 전송하여 복수의 스트림을 분할 다운로드하기를 원하는 경우 사용됩니다. 서버는 Range 헤더에 명시된 데이터의 일부분부터 전송을 시작합니다.

 

207 Multi-Status

여러 리소스가 여러 상태 코드를 가지는 상황에서 정보를 전달합니다. 이 코드는 WebDAV (Web Distributed Authoring and Versioning)에서 사용됩니다.

 

208 Already Reported

반복적으로 동일 컬렉션에 바인드된 여러 내부 멤버를 열거하는 것을 피하기 위해 사용됩니다. 이 코드는 WebDAV에서 사용됩니다.

 

226 IM Used (HTTP Delta encoding)

 

서버가 GET 요청에 대한 리소스 응답을 완료했고, 현재 인스턴스에 하나 이상의 인스턴스 조작이 적용되었음을 알려줍니다.

- 3xx - 리다이렉션

3xx 상태 코드는 클라이언트가 요청한 리소스의 위치가 변경되었음을 나타냅니다. 이러한 상태 코드는 클라이언트를 다른 위치로 리다이렉션하거나 추가 동작을 취하도록 안내합니다. 가장 많이 사용되는 3xx 상태 코드는 301 (Moved Permanently)와 302 (Found)입니다. 301 상태 코드는 요청한 리소스가 영구적으로 다른 위치로 이동되었음을 나타내며, 302 상태 코드는 임시적으로 다른 위치로 리다이렉션된 것을 나타냅니다.

 

300 Multiple Choice

요청에 대해 여러 응답이 가능하며, 사용자 에이전트 또는 사용자는 그 중 하나를 선택해야 합니다. 응답을 선택하는 방법에 대한 표준화된 방법은 존재하지 않습니다.

 

301 Moved Permanently

요청한 리소스의 URI가 영구적으로 변경되었음을 나타냅니다. 응답에서 새로운 URI가 제공될 수 있습니다.

 

302 Found

요청한 리소스의 URI가 일시적으로 변경되었음을 나타냅니다. 새로운 URI는 나중에 만들어질 수 있습니다. 따라서 클라이언트는 향후 요청도 반드시 동일한 URI를 사용해야 합니다.

 

303 See Other

클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때, 서버가 클라이언트로 직접 응답을 보냅니다.

 

304 Not Modified

이 응답은 캐시를 목적으로 사용됩니다. 클라이언트에게 응답이 수정되지 않았음을 알려주며, 따라서 클라이언트는 계속해서 캐시된 응답을 사용할 수 있습니다.

 

305 Use Proxy

이전 버전의 HTTP 사양에서 정의되었으며, 요청한 리소스에 접근하기 위해서는 반드시 프록시를 사용해야 함을 나타냅니다. 이 코드는 보안상의 이유로 사용이 줄어들고 있습니다.

 

306 Unused

현재는 사용되지 않으며, 추후 사용을 위해 예약되어 있는 상태 코드입니다. 이 코드는 HTTP 1.1 사양 이전에 사용되었습니다.

 

307 Temporary Redirect

클라이언트가 요청한 리소스가 다른 URI에 있으며, 이전 요청과 동일한 메소드를 사용하여 요청해야 할 때, 서버가 클라이언트에 직접 응답을 보냅니다. 302 Found HTTP 응답 코드와 동일한 의미를 가지지만, 사용자 에이전트는 반드시 사용된 HTTP 메소드를 변경하지 않아야 합니다. 따라서 첫 번째 요청이 POST로 이루어졌다면, 두 번째 요청도 반드시 POST를 사용해야 합니다.

 

308 Permanent Redirect

리소스가 영구적으로 다른 URI에 위치하고 있음을 의미합니다. 301 Moved Permanently HTTP 응답 코드와 동일한 의미를 가지지만, 사용자 에이전트는 반드시 HTTP 메소드를 변경하지 않아야 합니다. 따라서 첫 번째 요청이 POST로 이루어졌다면, 두 번째 요청도 반드시 POST를 사용해야 합니다.

 

- 4xx - 클라이언트 오류

4xx 상태 코드는 클라이언트의 요청이 잘못되었거나 처리할 수 없음을 나타냅니다. 이러한 상태 코드는 클라이언트의 요청에 오류가 있거나 권한이 없는 경우 등에 사용됩니다. 가장 흔한 4xx 상태 코드는 400 (Bad Request)와 404 (Not Found)입니다. 400 상태 코드는 서버가 클라이언트의 요청을 이해할 수 없거나 유효하지 않은 요청이라는 것을 나타내며, 404 상태 코드는 요청한 리소스를 찾을 수 없음을 나타냅니다.

 

400 Bad Request

이 응답은 잘못된 문법으로 인하여 서버가 요청하여 이해할 수 없음을 의미합니다.

 

401 Unauthorized

비록 HTTP 표준에서는 '미승인(unauthorized)'를 명확히 하고 있지만, 의미상 이 응답은 '비인증(unauthenticated)'를 의미합니다. 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 합니다.

 

402 Payment Required

이 응답 코드는 나중에 사용될 것을 대비해 예약되었습니다. 첫 목표로는 디지털 결제 시스템에 사용하기 위하여 만들어졌지만 지금 사용되고 있지는 않습니다.

 

403 Forbidden

클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않습니다. 예를 들어, 그들은 미승인이어서 서버는 거절을 위한 적절한 응답을 보냅니다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있습니다.

 

404 Not Found

서버는 요청받은 리소스를 찾을 수 없습니다. 브라우저에서는 알려지지 않은 URL을 의미합니다. 이것은 API에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수 있습니다. 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있습니다. 이 응답 코드는 웹에서 반복적으로 발생하기 때문에 가장 유명할지도 모릅니다.

 

405 Method Not Allowed

요청한 메소드는 서버에서 알고 있지만, 제거되었고 사용할 수 없습니다. 예를 들어, 어떤 API에서 리소스를 삭제하는 것을 금지할 수 있습니다. 필수적인 메소드인 GET과 HEAD는 제거될 수 없으며, 이 에러 코드를 리턴할 수 없습니다.

 

406 Not Acceptable

이 응답은 서버가 서버 주도 콘텐츠 협상을 수행한 후, 사용자 에이전트에서 정해준 규격에 따른 어떠한 콘텐츠도 찾지 않았을 때, 웹서버가 보냅니다.

 

407 Proxy Authentication Required

이것은 401과 비슷하지만 프록시에 의해 완료된 인증이 필요합니다.

 

408 Request Timeout

이 응답은 요청을 한 지 시간이 오래된 연결에 일부 서버가 전송하며, 어떤 때에는 이전에 클라이언트로부터 어떠한 요청이 없었다고 하더라도 보내지기도 합니다. 이것은 서버가 사용되지 않는 연결을 끊고 싶어하는 것을 의미합니다. 이 응답은 특정 몇몇 브라우저에서 빈번하게 보이는데 Chrome, Firefox 27+, 또는 IE 9와 같은 웹서핑 속도를 올리기 위해 HTTP 사전 연결 메카니즘을 사용하는 브라우저들이 해당됩니다. 또한 일부 서버는 이 메시지를 보내지 않고 연결을 끊어버리기도 합니다.

 

409 Conflict

이 응답은 요청이 현재 서버의 상태와 충돌될 때 보냅니다.

 

410 Gone

이 응답은 요청한 콘텐츠가 서버에서 영구적으로 삭제되었으며, 전달해 줄 수 있는 주소 역시 존재하지 않을 때 보냅니다. 클라이언트가 그들의 캐시와 리소스에 대한 링크를 지우기를 기대합니다. HTTP 기술 사양은 이 상태 코드가 '일시적인, 홍보용 서비스'에 사용되기를 기대합니다. API는 알려진 리소스가 이 상태 코드와 함께 삭제되었다고 강요해서는 안된다.

 

411 Length Required

서버에서 필요로 하는 Content-Length 헤더 필드가 정의되지 않은 요청이 들어왔기 때문에 서버가 요청을 거절합니다.

 

412 Precondition Failed

클라이언트의 헤더에 있는 전제조건은 서버의 전제조건에 적절하지 않습니다.

 

413 Payload Too Large

요청 엔티티는 서버에서 정의한 한계보다 큽니다. 서버는 연결을 끊거나 혹은 Retry-After 헤더 필드로 돌려보낼 것이다.

 

414 URI Too Long

클라이언트가 요청한 URI는 서버에서 처리하지 않기로 한 길이보다 깁니다.

 

415 Unsupported Media Type

요청한 미디어 포맷은 서버에서 지원하지 않습니다. 서버는 해당 요청을 거절할 것입니다.

 

416 Requested Range Not Satisfiable Range

헤더 필드에 요청한 지정 범위를 만족시킬 수 없습니다. 범위가 타겟 URI 데이터의 크기를 벗어났을 가능성이 있습니다.

 

417 Expectation Failed

이 응답 코드는 Expect 요청 헤더 필드로 요청한 예상이 서버에서는 적당하지 않음을 알려줍니다.

 

418 I'm a teapot

서버는 커피를 찻 주전자에 끓이는 것을 거절합니다.

 

421 Misdirected Request

서버로 유도된 요청은 응답을 생성할 수 없습니다. 이것은 서버에서 요청 URI와 연결된 스킴과 권한을 구성하여 응답을 생성할 수 없을 때 보내집니다.

 

422 Unprocessable Entity (WebDAV)

요청은 잘 만들어졌지만, 문법 오류로 인하여 따를 수 없습니다.

 

423 Locked (WebDAV)

리소스는 접근하는 것이 잠겨있습니다.

 

424 Failed Dependency (WebDAV)

이전 요청이 실패하였기 때문에 지금의 요청도 실패하였습니다.

 

426 Upgrade Required

서버는 지금의 프로토콜을 사용하여 요청을 처리하는 것을 거절하였지만, 클라이언트가 다른 프로토콜로 업그레이드를 하면 처리를 할지도 모릅니다. 서버는 Upgrade 헤더와 필요로 하는 프로토콜을 알려주기 위해 426 응답에 보냅니다.

 

428 Precondition Required

오리진 서버는 요청이 조건적이어야 합니다. 클라이언트가 리소스를 GET해서, 수정하고, 그리고 PUT으로 서버에 돌려놓는 동안 서드파티가 서버의 상태를 수정하여 발생하는 충돌인 '업데이트 상실'을 예방하기 위한 목적입니다.

 

429 Too Many Requests

사용자가 지정된 시간에 너무 많은 요청을 보냈습니다("rate limiting").

 

431 Request Header Fields Too Large

요청한 헤더 필드가 너무 크기 때문에 서버는 요청을 처리하지 않을 것입니다. 요청은 크기를 줄인 다음에 다시 전송해야 합니다.

 

451 Unavailable For Legal Reasons

사용자가 요청한 것은 정부에 의해 검열된 웹페이지와 같은 불법적인 리소스입니다.

 

- 5xx - 서버 오류

5xx 상태 코드는 웹 서버에서 발생한 오류를 나타냅니다. 이러한 상태 코드는 클라이언트의 요청을 처리하는 동안 서버에서 오류가 발생했음을 나타냅니다. 예를 들어, 500 (Internal Server Error) 상태 코드는 서버 내부에서 오류가 발생했음을 나타내며, 503 (Service Unavailable) 상태 코드는 서버가 현재 사용할 수 없음을 나타냅니다.

 

500 Internal Server Error

이 응답은 웹 사이트 서버에 문제가 있음을 나타내지만, 정확한 문제에 대해 자세히 설명할 수 없습니다.

 

501 Not Implemented

서버가 요청을 수행하는 데 필요한 기능을 지원하지 않음을 의미합니다.

 

502 Bad Gateway

서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미합니다. 인터넷 상의 서버가 다른 서버로부터 유효하지 않은 응답을 받았을 때 발생합니다.

 

503 Service Unavailable

서버가 요청을 처리할 준비가 되지 않았습니다. 일반적인 원인은 유지 보수를 위해 작동이 중단되거나 과부하가 걸린 서버입니다. 이 응답과 함께 사용자 친화적인 페이지를 전송하여 문제를 설명해야 합니다. 이 응답은 일시적인 조건에 사용되어야 하며, 가능하면 서비스를 복구하기 전 예상 시간을 포함하는 Retry-After: HTTP 헤더를 포함해야 합니다. 웹마스터는 이러한 일시적인 조건 응답을 캐시하지 않도록 주의해야 하며, 응답과 함께 전송되는 캐싱 관련 헤더에도 주의해야 합니다.

 

504 Gateway Timeout

한 서버가 다른 서버에서 적시에 응답을 받지 못했을 때 발생합니다. 예를 들어 웹 페이지를 로드하거나 브라우저에서 다른 요청을 처리하는 동안 한 서버가 액세스하고 있는 다른 서버로부터 시간 내에 응답을 받지 못한 경우 발생합니다. 이 오류는 서버 간의 네트워크 오류나 실제 서버의 문제로 인해 발생할 수 있습니다.

 

505 HTTP Version Not Supported

서버에서 지원하지 않는 HTTP 버전을 클라이언트가 요청했습니다. 대부분의 웹 브라우저는 웹 서버가 1.x 버전의 HTTP 프로토콜을 지원한다고 가정합니다. 실제로 오래된 1.0 버전 이하의 프로토콜은 거의 사용되지 않습니다. 이 오류가 표시된다면 웹 서버 소프트웨어에서 지원하는 HTTP 버전을 확인해야 합니다.

 

506 Variant Also Negotiates

서버에 내부 구성 오류가 있어 요청을 위한 투명한 콘텐츠 협상이 순환 참조로 이어진 경우 발생합니다.

 

507 Insufficient Storage

선택한 가변 리소스는 서버의 내부 구성 오류로 인해 협상 과정에서 적절한 끝점이 아닙니다.

 

508 Loop Detected (WebDAV)

서버가 요청을 처리하는 동안 무한 루프를 감지한 경우 발생합니다.

 

510 Not Extended

서버가 요청을 처리하기 위해 요청에 추가 확장이 필요한 경우 발생합니다.

 

511 Network Authentication Required

클라이언트가 네트워크 액세스를 얻기 위해 인증해야 함을 나타냅니다.

 

 

3. 결론 및 Q&A

HTTP 상태 코드는 웹 개발에서 중요한 역할을 합니다. 이 아티클에서는 주요한 상태 코드들에 대해 살펴보았습니다. 상태 코드를 이해하고 활용하여 웹 애플리케이션 개발 및 디버깅에 도움이 되기를 바랍니다.

 

자주 묻는 질문

Q1: HTTP 상태 코드는 왜 중요한가요?

HTTP 상태 코드는 웹 개발자에게 요청의 성공, 실패, 추가 동작이 필요한지를 알려줍니다. 이를 통해 개발자는 문제를 해결하고 디버깅하는 데 도움을 받을 수 있습니다.

 

Q2: 404 상태 코드는 무엇을 의미하나요?

404 상태 코드는 요청한 리소스를 찾을 수 없음을 나타냅니다. 클라이언트가 잘못된 URL을 요청했거나 해당 리소스가 삭제되었을 때 자주 사용됩니다.

 

Q3: 301과 302 상태 코드의 차이는 무엇인가요?

301 상태 코드는 요청한 리소스가 영구적으로 다른 위치로 이동되었음을 나타내며, 302 상태 코드는 임시적으로 다른 위치로 리다이렉션된 것을 나타냅니다.

 

Q4: 500 상태 코드는 어떤 경우에 사용되나요?

500 상태 코드는 서버 내부에서 오류가 발생했음을 나타냅니다. 웹 서버가 예상치 못한 문제로 인해 요청을 처리할 수 없는 경우에 사용됩니다.

 

Q5: 상태 코드 외에도 다른 HTTP 응답 헤더들이 있나요?

네, HTTP 응답 헤더는 상태 코드 외에도 다양한 정보를 포함할 수 있습니다. 일반적으로 사용되는 헤더에는 Content-Type, Cache-Control, Location 등이 있습니다.

 

 

반응형