티스토리 뷰

개요

프로젝트 하던 중 HTTP Status code를 다루게 되어 정리 겸 찾아보게 되었다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

 

내용

HTTP Response Status Code 란?

클라이언트가 서버에게 요청을 보낼 때 그 요청의 결과가 어떻게 되었는지를 알려주는 숫자로 된 코드이다.

총 5가지의 종류로 그룹화 되어있다.

  1. 정보 응답 (1xx)
  2. 성공적인 응답 (2xx)
  3. 리다이렉션 메시지 (3xx)
  4. 클라이언트 오류 응답 (4xx)
  5. 서버 오류 응답 (5xx)

 

정보 응답 (1xx)

요청을 받았으며 계속 작업을 할 때 사용하는 코드

  • 100 - Continue (계속)
    • 클라이언트가 요청을 계속하거나 요청이 이미 완료되어 응답을 무시해야하는 경우
  • 101 -  Switching Protocols (프로토콜 전환) 
    • 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중에 사용.
    • Upgrade 코드는 클라이언트 요청 헤더에 대한 응답으로 전송되며 서버가 전환하는 프로토콜을 나타냄
    • Upgrade는 이미 설정된 클라이언트/서버 연결을 다른 프로토콜로 업그레이드 하는데 사용됨. (HTTP 1.1전용)
  • 102 - Processing (처리) 
    • 서버가 요청을 수신하여 처리중이지만 아직 사용할 수 있는 응답이 없음.
  • 103 -  Early Hints
    • 주로 헤더와 함께 사용되어 서버가 응답을 준비하는 동안 Link 사용자 에이전트가 리소스 사전 다운로드 시작할 수 있도록 함.
    • HTTP Link 엔티티 헤더 필드는 HTTP 헤더에서 하나 이상의 Link를 직렬화 하는 수단을 제공한다.
    • 리소스 사전 다운로드 (rel)은 요소의 preload 속성 값을 사용하여 기본 렌더링 시작 전에 페이지에 필요할 리소스를 지정하여 HTML에서 가져오기 요청을 선언하는 것

 

성공적인 응답 (2xx)

클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 처리했음을 가르킬 때 사용하는 코드

  • 200 OK (성공)
    • 요청이 성공했음을 의미하며 HTML 메서드에 따라 성공의 의미가 조금씩 달라진다.
      • GET : 리소스를 가져와 메세지 본문에 전송하였다.
      • HEAD : 메세지 본문 없이 응답에 표현 헤더가 포함된다.
      • PUT & POST : API 요청 결과를 설명하는 리소스가 메세지 본문에 포함되어 전송된다.
      • TRACE : 메세지 본문에는 서버에서 받은 요청 메세지가 포함된다.
  • 201 Created (작성됨)
    • 요청이 성공했고, 새 리소스가 생성되었음을 나타낸다.
    • POST 요청 혹은 PUT 요청 후에 전송되는 응답.
  • 202 Accepted (허용됨)
    • 요청을 받았으나 아직 대응하지 않았다는 의미
    • 요청 결과를 나타내는 비동기식 응답을 나중에 보내려는 방법이 없기 때문에 커밋되지 않는다.
    • 다른 프로세스나 서버에서 요청을 처리하거나 일괄 처리를 하는 경우에 사용한다.
  • 203 Non-Authoritative Information (신뢰할 수 없는 정보)
    • 반환된 메타데이터가 원본 서버에서 사용 가능한 것과 정확히 동일하지 않으나 로컬 또는 타사 복사본에서 수집됨을 의미함.
    • 특정 경우를 제외하고 200 보다 선호되는 응답이다.
  • 204 No Content (콘텐츠 없음)
    • 콘텐츠가 없으나 헤더가 유용한 경우에 사용한다.
    • 사용자는 리소스에 대한 캐시된 헤더를 새 헤더로 업데이트 할 수 있다.
  • 205 Reset content (컨텐츠 재설정)
    • 이 요청을 보낸 문서를 재설정하도록 사용자에게 지시할 때 사용한다.
  • 206 Partila content (일부 컨텐츠)
    • 서버가 GET 일부만 성공적으로 처리했다는 의미이다.
    • Reane 인 응답 코드는 리소스 일부만 요청하기 위해 클라이언트에서 헤더를 보낼 때 사용한다.
    • Range 요청 헤더는 서버가 반환해야 하는 문서의 일부를 나타낸다.
  • 207 Multi-Status (다중 상태)
    • 여러 상태 코드가 적절할 수 있는 상황에 대해 여러 리소스에 대한 정보를 전달할 때 사용한다.
  • 208 Already Reported (이미 보고됨)
    • <dev:propstat> 와 동일한 컬렉션에 대한 여러 바인딩의 내부 멤버를 반복적으로 열거하지 않도록 응답 요소 내에서 사용한다.
  • 226 IM Used (HTTP 델타 인코딩)
    • 서버가 GET 리소스에 대한 요청을 이행했으며 응답은 현재 인스턴스에 적용된 하나 이상의 인스턴스 조작 결과를 나타낸다.

 

리다이렉션 메세지 (3xx)

클라이언트는 요청을 마치기 위해 추가 동작을 취해야 할 때 사용하는 코드

  • 300 Multiple Choices (여러 선택 항목)
    • 요청에 가능한 응답이 두 개 이상 있을 경우 사용하고 사용자는 둘 중 하나를 선택해야 한다.
    • 응답 중 하나를 선택하는 표준화된 방법은 없다.
      • 사용자가 선택할 수 있도록 작업 목록을 제공해야 한다.
  • 301 Moved Permanently (영구 이동)
    • 요청한 리소스의 URL이 영구적으로 변경되었을 때 사용한다.
    • GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치에 전달된다.
  • 302 Found (임시 이동)
    • 요청한 리소스의 URL이 일시적으로 변경되었음을 의미한다.
      • 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있으나 향후 요청시 원래 위치를 사용해야 한다..
  • 303 See Other (기타 위치 보기)
    • 서버는 GET 요청으로 다른 URL에 요청된 리소스를 가져오도록 클라이언트에게 지시할 때 사용한다.
    • HEAD 요청 이외의 모든 요청을 다른 위치로 자동으로 전달한다.
  • 304 Not Modified (수정되지 않음)
    • 캐싱 목적으로 사용된다.
    • 마지막 요청 이후 페이지가 수정되지 않았음을 클라이언트에 알리므로 클라이언트는 동일한 캐시 버전의 응답을 계속 사용할 수 있다.
    • 마지막으로 페이지를 요청 후 페이지 변경이 없다면 응답 (If-Modified-Since HTTP 헤더) 을 표시하도록 서버를 구성해야한다.
  • 305 Use Proxy (프록시 사용)
    • 프록시를 사용하여 요청한 페이지만 액세스 할 수 있을 때 사용한다.
    • 요청된 응답이 프록시에 의해 액세스되어야 함을 나타내기 위해 HTML 사양의 이전 버전에서 정의되었다.
    • 프록시 인밴트 구성과 관련된 보안 문제로 인해 더 이상 사용되지 않는다.
  • 306 Unused
    • HTTP/1.1 사양에서 사용된 응답 코드로 현재는 사용되지 않는다.
  • 307 Temporary Redirect (임시 리다이렉션)
    • 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있으나 요청자는 향후 요청 시 원래 위치를 계속 사용해야 할 때 사용한다.
    • 서버는 이전에 요청에서 사용된 것과 동일한 메서드를 사용하여 다른 URI에서 요청된 리소스를 가져오도록 클라이언트에게 지시할 때 사용한다.
    • 사용된 HTTP 메서드를 사용자가 변경해서는 안 된다는 점을 제외하면 HTTP 응답 코드와 동일한 의미를 가진다.
  • 308 Premanent Redirect (영구 리다이렉션)
    • 자원이 Location:Http 응답 헤더에 지정된 다른 URI에 영구적으로 위치함을 의미한다.
    • 307과 동일하게 사용자가 HTTP 메서드를 변경하면 안된다는 점을 제외하면 HTTP 응답 코드와 동일한 의미이다.

 

클라이언트 오류 응답 (4xx)

클라이언트에 오류가 있을 때 사용하는 코드

  • 400 Bad Request (잘못된 요청)
    • 클라이언트 오류로 인식되는 것으로 인해 요청을 처리할 수 없거나 처리할 수 없을 경우 사용한다.
      • 예시로 잘못된 요청 구문, 잘못된 요청 메세지 프레이밍 또는 사기성 요청 라우팅가 존재한다.
  • 401 Unauthorized ( 권한 없음)
    • 요청시 인증이 필요할 경우에 사용되며 서버는 로그인에 필요한 페이지를 제공할 수 있다.
    • 클라이언트는 요청된 응답을 얻기 위해 자신을 인증해야 한다.
  • 402 Payment Required (결제 필요)
    • 결제를 해야만 접근할 수 있을 경우 사용한다.
    • 초기 목적은 디지털 결제 시스템에 사용하는 것이었으나 현재 거의 사용되지 않고 표준 규칙이 존재하지 않는다.
  • 403 Forbidden (금지됨)
    • 클라이언트는 콘텐츠의 대한 액세스 권한이 없을 때 사용한다. (서버에서 요청 거부)
    • 권한이 없기에 서버가 요청된 리소스 제공을 거부한다.
    • 401과 달리 클라이언트의 ID는 서버에서 알고 있다.
  • 404 Not Found (찾을 수 없음)
    • 서버가 요청한 리소스(페이지)를 찾을 수 없을 때 사용한다.
    • 브라우저에서 URL이 인식되지 않음을 의미하며 API에서는 엔드포인트는 유효하나 리소스 자체가 존재하지 않음을 의미할 수도 있다.
    • 웹에서 자주 발생하기 때문에 가장 잘 알려져 있는 코드이다.
  • 405 Method Not Allowed (허용되지 않은 메서드)
    • 요청에 지정된 방법을 사용할 수 없을 때 사용된다.
      • 예시로 POST 방식으로 요청 받는 서버에 GET 요청을 보내는 경우, 읽기 전용 리소스에 PUT 요청을 보낸 경우가 있다.
  • 406 Not Acceptable (허용되지 않음)
    • 요청한 페이지가 요청한 콘텐츠 특성으로 응답할 수 없을 때 사용된다.
    • 웹 서버가 서버 기반 콘텐츠 협상을 수행 후 사용자 에이전트가 지정한 기준을 준수하는 콘텐츠를 찾지 못할 때 사용된다.
  • 407 Proxy Authentication Required (프록시 인증 필요)
    • 401 프록시와 유사하지만 사용자가 프록시를 사용하여 인증이 필요할 때 사용된다.
    • 서버에서 이 응답을 표시한다면 사용자가 사용할 프록시를 가르키는 것이기도 하다.
  • 408 Request Timeout (요청 시간 초과)
    • 서버의 요청 대기 시간이 초과하였을 때 사용한다.
    • Chrome, Firefox 28+, IE9과 같은 일부 브라우저가 서핑 속도를 높이기 위해 사용하는 HTTP 사전 연결 매커니즘으로 인해 많이 사용된다.
  • 409 Conflict (충돌)
    • 서버가 요청을 수행하는 동안 충돌이 발생할 때 사용된다.
    • 서버는 응답할 때 충돌에 대한 정보를 표시해야하며, PUT 요청과 충돌하는 PUT 요청에 대한 응답으로 이 코드를 요청 간 차이점과 함께 목록을 함께 표시해야 한다.
  • 410 Gone (사라짐)
    • 요청한 콘텐츠가 전달 주소 없이 서버에서 영구적으로 삭제되었을 때 전송된다.
    • 404와 비슷하며 이전엔 있었으나 더 이상 존재하지 않는 리소스에 대신 404를 사용하기도 한다.
    • 리소스가 영구적으로 이동된 경우 301을 사용하여 리소스의 새 위치를 지정해야 한다.
  • 411 Length Required (길이 필요)
    • Content-Length 헤더 필드가 정의되지 않거나 유효하지 않을 시 서버에서 요청 거부 할 때 사용된다.
  • 412 Precondition Failed (사전 조건 실패)
    • 클라이언트는 서버가 충족하지 않은 전제 조건을 헤더에 표시할 때 사용된다.
    • 예시로 사용자의 요청이 서버가 지정한 사전 조건을 만족하지 않는 경우가 있다.
  • 413 Payload Too Large ( 요청 속성이 너무 큼)
    • 요청이 서버에서 정의한 제한보다 클 때 사용된다.
    • 이런 경우 서버는 연결을 끊거나 Retry-After 헤더 필드를 반환할 수 있다.
  • 414 URI Too Long (요청 URI가 너무 김)
    • 요청된 URI가 서버가 해석할 수 있는 범위를 초과했을 때 사용된다.
  • 415 Unsupported Media Type (지원되지 않는 미디어 유형)
    • 요청한 데이터의 미디어 형식이 서버에서 지원되지 않아 요청을 거부하는 경우에 사용된다.
  • 416 Range Not Satisfiable (처리할 수 없는 요청 범위)
    • Range 요청의 헤더 필드에 지정된 범위를 충족할 수 없을 때 사용된다.
    • 범위가 대상 URI의 데이터 크기를 벗어날 수 있다.
  • 417 Expectation Failed (예상 실패)
    • Expect 요청 헤더의 요구사항을 서버에서 충족할 수 없음을 의미할 때 사용한다.
  • 418 I'm a teapot
    • 서버가 어떤 시도에 대해 추출 거부할 때 찻주전자와 커피를 비교할 때 사용된다.
    • 해당 에러는 https://www.google.com/teapot 을 들어가면 볼 수 있다.
  • 421 Misdirected Request 
    • 요청이 응답을 생성할 수 없는 서버로 지정되었을 때 사용된다.
    • 요청 URI에 포함된 체계와 권한의 조합에 대한 응답을 생성하도록 구성되지 않는 서버에 보낼 수 있다.
  • 422 Unprocessable Content (처리할 수 없는 엔티티)
    • 요청이 잘 되었으나 의미적인 오류가 생겼을 때 사용한다.
  • 423 Locked (잠금)
    • 액세스 중인 리소스가 잠겨있을 때 사용한다.
  • 424 Failed Dependency 
    • 이전 요청 실패로 인해 요청이 실패할 때 사용된다.
  • 425 Too Early
    • 서버가 살릴 수 있는 요청을 처리하는 위험을 감수하지 않음을 알릴 때 사용된다.
  • 426 Upgrade Required (업그레이드 필요)
    • 클라이언트가 업그레이드 헤더 필드에 주어진 프로토콜로 요청을 보내야 할 때 사용된다.
    • 현재 프로토콜을 사용하여 요청 수행을 거부하지만 클라이언트가 다른 프로토콜로 업데이트 후 요청한다면 서버는 요청을 수행힌다.
  • 428 Precondition Required (전제 조건 필요)
    • 원본 서버 요청이 조건적일 때 사용한다.
    • 업데이트 손실 문제를 방지하기 위해 있는 코드이다.
      • GET 리소스의 상태를 클라이언트가 수정하고 PUT 서버로 보내는 동안 제 3자에 의해 서버 상태가 수정되어 충돌을 일으키는 경우에 사용된다.
  • 429 Too Many Requests(너무 많은 요청)
    • 사용자가 주어진 시간 동안 너무 많은 요청을 보낼 때 사용한다.
  • 431 Request Header Filelds Too Large (요청 헤더가 너무 큼)
    • 헤더 필드가 너무 커서 서버에서 요청을 처리하지 않을 때 사용한다.
    • 요청 헤더 필드의 크기를 줄인 후 다시 제출해야 정상 작동된다.
  • 451 Unavailable For Legal Reasons (법적인 이유로 사용 불가)
    • 사용자가 정부에서 검열한 웹 페이지와 같이 법적으로 제공할 수 없는 리소스를 요청할 때 사용한다.

 

서버 오류 응답 (5xx)

서버가 유효한 요청을 수행하지 못했을 때 사용하는 코드

  • 500 Internal Server Error (내부 서버 오류)
    • 서버에서 처리 방법을 알 수 없는 상황이 발생했을 때 사용된다.
  • 501 Not Implemented (구현되지 않음)
    • 요청 방법이 서버에서 지원되지 않아 처리할 수 없을 때 사용된다.
      • 예를 들어 서버가 요청 메소드를 인식하지 못하는 경우 등이 있다.
  • 502 Bad Gateway (불량 게이트웨이)
    • 서버가 용청을 처리할 때 필요한 응답을 얻기 위한 게이트웨이 역활을 하는 중 잘못된 응답을 받았음을 의미한다.
  • 503 service Unavaliable (서비스를 시작할 수 없음)
    • 서버가 요청을 처리할 준비가 되지 않았을 때 사용된다.
    • 서버가 오버로드 된 경우, 유지관리를 위해 서버를 닫은 경우 등이 예시로 존재한다.
  • 504 Gateway Timeout (게이트웨이 시간 초과)
    • 서버가 게이트웨이나 프록시 역활을 하고 있거나 또는 업스트림 서비스에서 요청을 받지 못했을 때 사용된다.
  • 505 HTTP Version Not Supported (HTTP 버전이 지원되지 않음)
    • 요청에 사용된 HTTP 버전이 서버에서 지원되지 않을 때 사용된다.
  • 506 Variant Also Negotiates 
    • 서버 내부 구성에 오류가 있을 때 사용된다.
  • 507 Insufficient Storyage(용량 부족)
    •  서버가 요청을 성공적으로 완료하는데 필요한 데이터를 저장할 수 없어 리소스에서 메서드를 수행할 수 없을 때 사용된다.
  • 508 Loop Detected (루프 감지됨) 
    • 요청을 처리하는 동안 서버에서 무한 루프를 감지했을 때 사용된다.
  • 510 Not Extended (확장되지 않음)
    • 서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요할 때 사용한다.
  • 511 Network Authentication Required (네트워크 인증 필요)
    • 클라이언트가 네트워크 액세스 권한을 얻기 위해 인증해야 함을 나타낸다.

 

결론

필요에 따라 상태 코드를 사용해야하며, 몇몇의 코드는 브라우저에 대한 호환성을 제공하지 않으니 잘 알아보고 써야할 것 같다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함