[Web] HTTP 상태 코드 총정리 (응답 코드)

 상태코드란? 

HTTP 상태 코드는 클라이언트가 보낸 HTTP 요청에 대한 처리 상태를 서버의 응답에서 알려주는 기능을 가지고 있는 3자리 숫자코드를 의미합니다. 크게 1xx, 2xx, 3xx, 4xx, 5xx의 숫자로 시작되는 5가지의 분류로 나뉘어 있으며 각각의 상태 코드는 특정한 의미를 가지고 있습니다. 이 HTTP 상태코드 통해 사용자는 클라이언트와 서버 간의 통신 과정에서 어떤 일이 발생했는지를 대략적으로 유추할 수 있습니다. 

 

  • 1xx(Informational): 요청이 수신되어 처리 중
  • 2xx(Successful): 요청 정상 처리
  • 3xx(Redirection): 요청을 완료하려면 추가 행동이 필요
  • 4xx(Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음.
  • 5xx(Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함

 

참고로 HHTP 상태 코드의 의미는 보편적인 의미가 이미 있기는 하지만 서버 측의 정책에 따라 다르게 적용될 수는 있다는 점은 알아야 합니다. 그래서 서버 측에서 내려주는 에러를 정확하게는 알지 못하고 대략적으로 유추만 가능하다는 것입니다.

 

 1xx (informational) : 요청이 수신되어 처리 중 

상태 코드가 '1'로 시작하는 1XX의 경우에는 클라이언트의 요청이 받아들여졌거나 프로세스가 진행 중일 때 사용되는 응답 코드입니다. 현재는 서버의 속도가 빨라졌기 때문에 거의 사용하지 않습니다. 참고로 해당 코드는 HTTP 1.0에서 지원되지 않습니다.

 

100 Continue

프로세스가 진행 중이라는 것을 알리는 응답코드입니다. 서버는 요청의 첫 부분을 받았으며, 클라이언트는 나머지를 계속 보낼 수 있습니다. 현재까지의 진행상태에 문제가 없으며, 클라이언트가 계속해서 요청을 하거나 이미 요청을 완료한 경우에는 무시해도 되는 것을 알려줍니다.

 

101 Switching Protocols

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

 

102 Processing

서버가 클라이언트의 요청을 수신하여 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음을 알려줍니다.

 


 

 2xx (Successful): 요청 정상 처리 

상태코드가 '2'로 시작하는 2XX는 클라이언트의 요청을 서버가 정상적으로 처리했을 때 내려주는 응답 코드입니다.  

 

200 OK

가장 많이 보는 응답코드로 클라이언트의 요청을 서버가 성공적으로 수행했다는 응답 코드입니다. 참고로 응답코드는 위와 같이 HTTP 응답의 첫 번째 줄에 포함되어 있습니다.

 

201 Created

 

클라이언트 요청을 서버가 성공적으로 받아들여서 새로운 리소스가 생성되었음을 알리는 코드입니다. 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다.

 

202 Accepted

클라이언트 요청은 성공적으로 접수되었으나 처리가 완료되지는 않았음을 알리는 코드입니다. 이 응답코드는 주로 배치 프로세스처럼 서버가 요청을 처리 혹은 대기하고 있거나 다른 프로세스에서 처리되는 경우를 위해서 만들어진 코드입니다.

 

203 Non-Authoritative Information

상태코드 203은 서버의 원본 대신 사용자의 로컬이나 다른 복사본이 제공되었다는 상태코드입니다. 프록시로 인해서 발생하는 상태코드이기도 합니다. 다만 203 Non-Authoritative Information보다는 200 Ok코드가 더 우선시되므로 보기 쉬운 상태코드는 아닙니다.

 

204 No Content

서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없을 때 보여주는 코드입니다. 응답값으로 요청에 대해서 보내줄 수 있는 메시지는 없어도 헤더는 의미 있을 수 있습니다. 예를 들면 게시판 글의 저장과 같은 경우를 들 수 있겠는데요. 저장을 했을 때 특별한 응답 메시지는 필요 없고 204 코드로 저장이 성공적으로 저장이 되었다는 것만 알면 되겠죠.

 

205 Reset Content

이 응답 코드는 요청을 완수한 이후에 사용자-에이전트에게 이 요청을 보낸 문서를 재설정하도록 합니다.

 

206 Partial Content

이 응답 코드는 주로 클라이언트에서 다운로드를 할 때 사용되며 중간에 다운로드가 끊겼을 때 리소스 일부만 다시 요청하기 위해 클라이언트에서 범위 헤더를 보낼 때 사용됩니다. 클라이언트가 이어받기를 시도하면 웹서버가 이에 대한 응답코드로 '206 Partial Content'와 함께 Range 헤더에 명시된 데이터의 부분(byte)부터 전송을 시작합니다.

 

207 Multi-Status

여러 상태 코드가 적합한 상황에 대비하여 여러 리소스에 대한 정보를 전달합니다. 해당 코드는 WebDAV(Web Distributed Authoring and Vesioning)에 사용됩니다.

 

208 Multi-Status

여러 바인딩의 내부 멤버를 동일한 컬렉션에 반복적으로 열거하지 않도록 응답 요소 내부에서 사용됩니다. Prostat(property와 status의 합성어) 응답 속성으로 동일 컬렉션으로 바인드 된 복수의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 사용됩니다. 해당 코드는 WebDAV(Web Distributed Authoring and Vesioning)에 사용됩니다.

 

226 IM Used (HTTP Delta encoding)

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

 


 

 3xx (Redirection) : 리다이렉트 

상태코드가 3'으로 시작하는 3XX는 요청을 완료하기 위해 클라이언트에서 추가 조치가 필요한 경우로써 웹 브라우저는 3xx 응답 결과에 Location 헤더가 있는 겨우 Location 위치로 자동 이동(리다이렉트)합니다.

 

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 기술 사양에서 정의되었으며, 요청한 응답은 반드시 프록시를 통해서 접속해야 하는 것을 알려줍니다. 이것은 프록시의 in-band설정에 대한 보안상의 걱정으로 인하여 사라져 가고 있습니다.

 

306 Unused

이 응답 코드는 더 이상 사용되지 않으며, 현재는 추후 사용을 위해 예약되어 있습니다. 이것은 HTTP 1.1 기술사양 이전 버전에서 사용되었습니다.

 

307 Temporary Redirect

이 응답코드는 302 Found와 같은 의미를 가지고 있으며, 사용자가 반드시 사용된 HTTP 메서드(GET, POST)를 변경하지 않고 그대로 보내야 한다는 점만 다릅니다. 만약 첫 요청에 POST가 사용되었다면, 두 번째 요청도 반드시 POST를 사용해야 합니다.

 

308 Permanent Redirect

이 응답코드는 301 Moved Permanently와 같은 의미를 가지고 있으며, 용자가 반드시 사용된 HTTP 메서드(GET, POST)를 변경하지 않고 그대로 보내야 한다는 점만 다릅니다. 만약 첫 요청에 POST가 사용되었다면, 두 번째 요청도 반드시 POST를 사용해야 합니다.

 


 

 4XX (Client Error) : 클라이언트 오류 

상태코드가 '4'로 시작하는 4XX는 클라이언트의 요청에 오류가 있을 때 사용되는 코드입니다. 특히 클라이언트에서 잘못된 파라미터를 보내고 있거나 타깃 URL을 잘못 설정했을 때 발생합니다.

 

  • 클라이언트의 요청의 잘못된 문법등으로 서버가 요청을 수행할 수 없음
  • 오류의 원인이 클라이언트에 있음
  • 클라이언트가 이미 잘못된 요청 데이터를 보내고 있기 때문에, 여러 번 재시도해도 똑같이 실패함.

 

400 Bad Request

클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음을 나타냅니다 클라이언트는 요청 내용을 다시 검토하고, 보내야 합니다.

 

401 Unauthorized

클라이언트가 해당 리소스에 대한 인증이 필요하는 경우를 말합니다. 401 오류 발생 시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명합니다. 비록 HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 이 에러가 발생하였다면 클라이언트는 정상 응답을 받기 위해서는 반드시 스스로를 인증해야만 합니다.

 

402 Payment Required

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

 

403 Forbidden

서버가 요청을 이해했지만 승인을 거부함

주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우

예) 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우

 

클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않습니다. 주로 접근 권한이 충분하지 않을 경우에 내려주는 에러입니다. 예를 들면 Admin 등급이 아닌 사용자가 로그인하여 Admin 계정만 접근할 수 있는 관리자 페이지에 접근하는 것을 예로 들 수 있겠습니다.

 

404 Not Found

서버는 요청받은 리소스를 찾을 수 없다는 뜻입니다. 해당 URI에 해당하는 리소스를 찾을 수 없다는 의미로 클라이언트는 정확한 리소스의 URI를 찾아서 다시 요청을 보내야 합니다. 때로는 서버에서 인증받지 않은 클라이언트로부터 리소스를 숨겼기 때문에 이 응답을 403 코드를 대신 전송할 수도 있습니다. 

 

405 Method Not Allowed

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

 

406 Not Acceptable

이 응답은 서버 중심 콘텐츠 협상을 수행한 후, 웹 서버가 사용자 에이전트가 제공한 기준에 맞는 콘텐츠를 찾지 못할 때 전송됩니다.

 

407 Proxy Authentication Required

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

 

408 Request Timeout

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

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

 

423 Locked

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

 

424 Failed Dependency

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

 

426 Upgrade Required

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

 

428 Precondition Required

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

 

429 Too Many Requests

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

 

431 Request Header Fields Too Large

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

 

451 Unavailable For Legal Reasons

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

 


 

 

 5XX (Server Error) : 서버 오류 

상태코드가 '5'로 시작하는 5XX는 서버 이 응답 코드는 서버에서 처리 중에 오류가 발생했거나 예기치 못한 상황이 발생했을 때 사용됩니다. 500 오류는 주로 서버 측에서의 문제를 나타내며, 클라이언트가 직접적으로 조치할 수 있는 것은 아니고 서버 관리자나 서버 측의 개발자가 문제를 해결해야 합니다.

 

  • 서버 문제로 오류 발생
  • 오류의 원인이 서버에 있음
  • 요청값 그대로 재시도하면 성공할 가능성이 있음 (복구가 되거나 등등)

 

500 Internal Server Error

서버가 처리 방법을 모르는 상황이 발생했습니다. 서버는 아직 처리 방법을 알 수 없습니다. 애매하면 이 오류를 내려주면 됩니다.

 

501 Not Implemented

요청 방법이 서버에서 지원되지 않으므로 처리할 수 없습니다. 클라이언트는 요청한 동작이 서버에서 지원되지 않는다는 것을 나타내는 메시지를 받을 수 있습니다.

 

502 Bad Gateway

이 오류 응답은 서버가 요청을 처리하는 데 필요한 응답을 얻기 위한 게이트웨이 역할을 하는 동안 잘못된 응답을 받았음을 의미합니다.

 

503 Service Unavailable

서버가 요청을 처리할 준비가 되지 않았습니다. 주로 서버가 게이트웨이나 프록시 역할을 하는 서버에서 잘못된 응답을 받았을 때 사용됩니다.

 

504 Gateway Timeout

이 오류 응답은 서버가 게이트웨이 역할을 하고 있고, 제때 응답을 받을 수 없을 때 제공됩니다.

 

505 HTTP Version Not Supported

요청에 사용된 HTTP 버전은 서버에서 지원되지 않습니다.

 

508 Loop Detedcted

서버가 요청을 처리하는 동안 무한 루프를 감지했습니다.

 

510 Not Extended

서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요합니다.

 

511 Network Authentication Required

네트워크 액세스를 얻기 위해 인증을 받아야 할 필요가 있음을 나타냅니다.

 

끝으로 HTTP 응답 코드는 모두 정의되어 있지는 않습니다. 즉 없는 코드들이 많습니다. 4XX 코드로 예를 들자면 400 ~ 499까지 모두 등록이 되어 있지 않다는 뜻입니다. 이 HTTP 응답코드는 가끔 신규 등록되어 클라이언트가 이해할 수 없는 상태코드가 내려올 수도 있습니다. 이렇게 이해하지 못하는 HTTP 응답코드가 내려오면 클라이언트는 최상위 코드로 해석해서 처리합니다. 그래서 혹여나 새로운 상태코드가 추가되어 클라이언트가 이해할 수 없는 응답코드가 내려온다고 하더라도 심각한 오류사항은 발생하지 않게 됩니다.

- example -
299 ??? -> 2XX ( Successful )
451 ??? -> 4xx (Client Error)
599 ??? -> 5xx (Server Error)

 

댓글

Designed by JB FACTORY