DEV/Web

[HTTP] 상태 코드(Status Code)

Bi3a 2023. 12. 6. 09:50

728x90

웹을 공부해봅시다.

 

HTTP 상태 코드

서버와 클라이언트 사이의 데이터 전송 간의 상태를 나타내는 코드입니다.
총 세자리 수이며 첫째 자리수가 4 ~ 5인 경우는 관리자가 즉시 알아야 할 정보입니다.

 

상태 코드 앞자리 수에 따른 상태 코드 대분류

  • 1xx(정보) : 요청을 받았으며 프로세스를 계속 진행
  • 2xx(성공) : 요청을 성공적으로 받고 수용했음
  • 3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요
  • 4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없음
  • 5xx(서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패

 

1XX : Information Responses (정보 요청받음)

서버가 요청을 받았으며, 서버에 연결된 클라이언트는 작업을 계속 진행하라는 의미입니다. 

100 Continue

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

101 Switching Protocol

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

102 Processing(WebDAV)

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

 

 

2XX : Successful responses

클라이언트의 정보 요청이 요구사항에 맞게 성공적으로 완료되었음을 의미합니다.

 

200 OK

  • 요청이 성공적으로 되었으며, 정보는 요청에 따른 응답으로 반환됩니다.

201 Created

  • 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다.
  • 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다.

202 Accepted

  • 요청을 수신하였지만, 그에 맞는 행동을 할 수 없음을 의미합니다.
  • 이 응답은 요청 처리에 대한 결과를 이후에 HTTP로 비동기 응답을 보내는 것에 대해서 명확하게 명시하지 않습니다.
  • 이는 다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나 배치 프로세스를 하고 있는 경우입니다.

203 Non-Authoritative Information

  • 이 응답 코드는 돌려받은 메타 정보 세트가 오리진 서버의 것과 일치하지 않지만 로컬이나 서드 파티 복사본에서 모아졌음을 의미합니다. 
  • 이러한 조건에서는 이 응답이 아니라 200 OK 응답이 반드시 우선됩니다.

204 No Content

  • 요청에 대해서 보내줄 수 있는 콘텐츠가 없지만, 헤더는 의미있을 수 있습니다.
  • 사용자는 리소스가 캐시된 헤더를 새로운 것으로 업데이트 할 수 있습니다.

205 Reset Content

  • 이 응답 코드는 요청을 완수한 이후에 사용자 에이전트에게 이 요청을 보낸 문서 뷰를 리셋하라고 알려줍니다.

206 Partial Content

  • 클라이언트에서 복수의 스트림을 분할 다운로드를 하고자 범위 헤더를 전송했음을 의미합니다. 
  • 클라이언트가 이어받기를 시도하면 웹서버가 이에 대한 응답코드로 '206 Partial Content'와 함께 Range 헤더에 명시된 데이터의 부분(byte)부터 전송을 시작합니다.

207 Multi-Status(WebDAV)

  • 멀티-상태 응답은 여러 리소스가 여러 상태 코드인 상황이 적절한 경우에 해당되는 정보를 전달합니다.

208 Already Reported(WebDAV)

  • Prostat(property와 status의 합성어) 응답 속성으로 동일 컬렉션으로 바인드된 복수의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 사용됩니다.

226 IM Used

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

 

3XX : Redirection messages

클라이언트에 대한 요청은 완료되었으나, 해당 요청에 대한 요구사항을 충족하기 위해 추가 조치가 필요한 상황입니다.

 

300 Multiple Choice

  • 요청에 대해서 하나 이상의 응답이 가능합니다.
  • 클라이언트 또는 사용자는 그중에 하나를 반드시 선택해야 합니다.

301 Moved Permanently

  • 이 응답 코드는 요청한 리소스의 URI가 변경되었음을 의미합니다.

302 Found

  • 이 응답 코드는 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다.
  • 새롭게 변경된 URI는 나중에 만들어질 수 있습니다.
  • 그러므로, 클라이언트는 향후 요청도 반드시 동일한 URI로 진행해야 함을 의미합니다.

303 See Other

  • 클라이언트가 요청한 리소스를 다른 URI에서 얻을 수 있을 때 서버가 클라이언트로 직접 보내는 응답입니다.

304 Not Modified

  • 캐시 관련 응답 코드입니다.
  • 이것은 클라이언트에게 응답이 수정되지 않았음을 알려주며,
  • 그러므로 클라이언트는 계속해서 응답의 캐시된 버전을 사용할 수 있습니다.

305 Use Proxy

  • 이전 버전의 HTTP 기술 사양에서 정의되었으며,
  • 요청한 응답은 반드시 프록시를 통해서 접속해야 하는 것을 알려줍니다.
  • 이것은 프록시의 in-band 설정에 대한 보안상 문제로 인해 사라지고 있는 코드입니다.

306 Unused

  • 이 응답 코드는 더이상 사용되지 않습니다.
  • 이것은 HTTP 1.1 기술사양 이전 버전에서 사용되었습니다.

307 Temporary Redirect

  • 클라이언트가 요청한 리소스가 다른 URI에 있으며, 이전 요청과 동일한 메소드를 사용하여 요청해야 할 때, 서버가 클라이언트에 이 응답을 직접 보냅니다.
  • 이것은 302 Found HTTP 응답 코드와 동일한 의미를 가지고 있으나, 클라이언트는 반드시 요청에 사용한 HTTP 메소드를 동일하게 사용해야 함을 알립니다.
  • 만약 첫 요청에 POST가 사용되었다면, 두번째 요청도 반드시 POST를 사용해야 합니다.

308 Permanent Redirect

이것은 리소스가 이제 HTTP 응답 헤더의 Location:에 명시된 영구히 다른 URI에 위치하고 있음을 의미합니다. 이것은 301 Moved Permanently HTTP 응답 코드와 동일한 의미를 가지고 있으며, 사용자 에이전트가 반드시 HTTP 메소드를 변경하지 말아야 하는 점만 다릅니다. 만약 첫 요청에 POST가 사용되었다면, 두번째 요청도 반드시 POST를 사용해야 합니다.

 

4XX : Client error responses

클라이언트의 요청의 문법이 잘못되었거나 요청을 서버가 처리할 수 없음을 의미하는 상태 코드 응답입니다.

 

400 Bad Request

  • 클라이언트의 요청을 서버가 이해할 수 없음을 의미합니다.

401 Unauthorized

  • 의미상 비인가(unauthenticated)를 의미합니다.
  • 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 합니다.
  • 쿠키/세션, JWT를 통한 인증 등 해당 웹페이지에서 제공하는 인증/인가를 통해 로그인해야 함을 의미합니다.

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

  • 클라이언트가 요청한 콘텐츠가 서버에서 영구적으로 삭제되었으며, 전달할 수 있는 URL이 존재하지 않음을 의미합니다.
  • 서버는 클라이언트가 서버의 캐시와 리소스에 대한 링크를 지우기를 기대합니다.
  • 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

  • 서버는 커피를 찻 주전자에 끓이는 것을 거절합니다(?)
  • 1998년 RFC에서 출판한 상태 코드로, 만우절 농담입니다.

421 Misdirected Request

  • 서버로 유도된 요청이 응답을 생성할 수 없음을 의미합니다.
  • 클라이언트 요청 URI와 연결된 스킴과 권한을 서버가 구성할 수 없을 때 전송합니다.

422 ~ 428 (생략)

429 Too Many Requests

  • 사용자가 지정된 시간에 너무 많은 요청을 보냈음을 의미합니다.

431 Request Header Fields Too Large

  • 요청한 헤더 필드가 서버가 수용할 수 있는 크기보다 커 응답을 수용할 수 없음을 의미합니다.
  • 클라이언트는 요청 크기를 줄인 다음에 다시 전송해야 합니다.

451 Unavailable For Legal Reasons

  • 클라이언트가 요청한 것은 정부에 의해 검열된 웹페이지와 같은 불법적인 리소스임을 의미합니다.

 

5XX : Server error responses

500 Internal Server Error

  • 웹 사이트 서버에 문제가 있음을 의미하지만 서버는 정확한 문제에 대해 더 구체적으로 설명할 수 없습니다. (아아..)

501 Not Implemented

  • 서버가 요청을 이행하는 데 필요한 기능을 지원하지 않음을 나타냅니다.

502 Bad Gateway

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

503 Service Unavailable

  • 서버가 요청을 처리할 준비가 되지 않았습니다.
  • 일반적인 원인은 유지보수를 위해 작동이 중단되거나 과부하가 걸린 서버입니다.
  • 이 응답과 함께 문제를 설명하는 사용자 친화적인 페이지가 전송되어야 한다는 점에 유의하며 사용해야 합니다.
  • 이 응답은 임시 조건에 사용되어야 하며, 헤더는 서비스를 복구하기 전 예상 시간을 포함해야 합니다.

504 Gateway Timeout

  • 웹페이지를 로드하거나 브라우저에서 다른 요청을 채우려는 동안 한 서버가 액세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미합니다.
  • 이 오류 응답은 서버가 게이트웨이 역할을 하고 있으며 적시에 응답을 받을 수 없을 경우 주어집니다.
  • 이 오류는 대게 인터넷상의 서버 간의 네트워크 오류이거나 실제 서버의 문제입니다.
  • 컴퓨터, 장치 또는 인터넷 연결에 문제가 아닐 수 있습니다.

505 HTTP Version Not Supported

  • 서버에서 지원되지 않는 HTTP 버전을 클라이언트가 요청하였음을 의미합니다.
  • 대부분의 웹 브라우저는 웹 서버가 1.x 버전의 HTTP 프로토콜을 지원한다고 가정했을 때, 최근에는 잘 사용되지 않는 상태 코드입니다.

506 Variant Also Negotiates

  • 서버에 내부 구성 오류가 있는 경우 발생합니다. (순환 참조 등)

507 Insufficient Storage

  • 선택한 가변 리소스가 서버 내부 구성에 오류가 있는 경우 발생합니다.

508 Loop Detected (WebDAV)

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

510 Not Extended

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

511 Network Authentication Required

  • 클라이언트가 네트워크 액세스를 얻기 위해 인증할 필요가 있음을 나타냅니다.

 


틀린 부분이 있으면 댓글로 알려주세요!

 

'DEV > Web' 카테고리의 다른 글

[WEB] URI, URL의 정의와 차이점에 대한 이해  (0) 2023.11.05