🍳

초보 개발자의 일상

자료 모음/기타

HTTP 응답 상태 코드 - 미완성

dev.jelee 2024. 10. 25. 23:04

생각

개발 공부를 하면서 코드 작성해서 서버 실행시키면 종종 발생하는 에러들이 많았다.

303, 404, 500 같은 에러를 접했는데 404는 흔히 봤었던 not found 에러라서 잘 아는데 나머지는 생소하다보니 작업하다가 가 발생한 오류 코드를 찾아보고 '아~ 이런 에러구나.'라고 이해하고 넘어가다보니 나중에 같은 에러가 나도 다시 찾아보게 되는 일이 생겼다. 그래서 글로 정리해두면 나중에 찾기 편하지 않을까 싶은 생각에 글을 작성한다.

 

 

HTTP 상태 코드란

HTTP 상태 코드는 웹 서버가 클라이언트의 요청을 처리한 결과를 나타내주는 코드이다.

상태보드는 3자리의 숫자로 이루어져 있으며, 5개의 그룹으로 나누어져 있다.

  • 1xx : 정보를 제공하는 응답
  • 2xx : 성공적인 응답
  • 3xx : 리다이렉트 메세지
  • 4xx : 클라이언트 오류
  • 5xx : 서버 에러

 

상태 코드 관련 링크▼
https://datatracker.ietf.org/doc/html/rfc2616#section-10


1xx (정보 응답)

요청이 수신되었으며, 클라이언트가 계속 진행할 수 있도록 안내한다.

상태 코드 상태 이름
100 Continue
101 Switching Protocol
102 Processing
103 Early Hints

 

100 (Continue)

  • 클라이언트가 요청의 첫 부분(헤더)을 보냈을 때, 서버가 그 요청을 받았고 진행해도 좋다는 신호이다.
  • 클라이언트는 서버로부터 이 응답을 받은 후 본문을 전송하면 된다. 만약 클라이언트가 요청을 완료한 경우, 이 응답은 무시해도 된다.

101 (Switching Protocol)

  • 클라이언트가 서버에게 특정 포로토콜로 전환해달라고 요청하고 이에 대한 프로토콜 변경 요청을 승인하는 응답을 나타내는 상태 코드이다.
  • 클라이언트가 버에게 요청한 내용은 Upgrade 헤더에 새로운 프로토콜의 정보가 포함되어 있다. 주로 웹소켓(WebSocket)과 같은 새로운 통신 프로토콜을 사용할 때 나타난다.

102 ( Processing )

  • WebDAV(웹 분산 저작 프로토콜)와 같은 특정 상황에서 사용된다.
  • 서버가 클라이언트에게 요청을 수신하고 이를 처리하고 있는 상태이지만 아직 제대로 된 응답을 알려줄 수 없음을 알리는 임시적인 응답이다.

103 ( Early Hints )

  • 서버가 응답을 준비하는 동안 Link 헤더를 사용하여 클라이언트가 사전로딩을 시작할 수 있도록 한다.
  • 여기서 Link 헤더는 어떤 리소스를 미리 로드해야하는지 알려준다. 예를들어 HTML 페이지를 요청할 때 CSS, JavaScript파일의 URL을 Link 헤더에 포함해서 클라이언트에게 사전로딩 하라고 알려주는 거다.

2xx (성공 응답)

요청이 성공적으로 처리되었음을 나타낸다.

상태 코드 상태 이름
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
207 Multi-Status
208 Multi-Status
226 IM Used

 

200 (OK)

  • 클라이언트의 HTTP 요청에 서버가 정사적으로 처리되었을 때 나타나는 응답 코드이다.
  • 성공의 의미는 HTTP 메소드에 따라 다르다.
    • GET : 리소스를 불러와서 메시지 바디에 전송한다.
    • HEAD : 개체 헤더가 메시지 바디에 있다.
    • PUT/POST : 수행 결과에 대한 리소스가 메시지 바디에 전송된다.
    • TRACE : 메시지 바디는 서버에서 수신한 요청 메세지를 포함하고 있다.

201 (Created)

  • 요청이 성공적으로 처리되어 새로운 리소스가 생성되었을 때 나타나는 상태 코드이다.
  • 일반적으로 POST 요청 또는 일부 PUT 요청 후에 전송되는 응답이다.

202 (Accepted)

  • 요청이 수락되었지만 아직 처리가 완료되지 않았을 때 나타나는 상태 코드이다.
  • HTTP에서 요청의 결과를 나중에 비동기적으로 전달할 수 있는 방법이 없다. 그래서 결과가 확정되지 않은 상태이다.
    • 비동기적으로: 서버가 요청을 수락한 후 나중에 결과를 전달한다는 의미
  • 다른 프로세스나 서버가 요청을 처리 중이거나, 일괄 처리를 위해 사용된다.

203 (Non-Authoritative Information)

  • 클라이언트의 요청이 성공적으로 처리되었지만 반환된 메타데이터가 원본 서버의 정보와 일치하지 않으며, 대신 로컬 캐시나 다른 서버(타사)에서 가져왔다는 것을 말해주는 상태 코드이다.
  • 주로 사용되는 상황은 다른 리소스의 복사본(미러)이나 백업에서 데이터를 제공할 때 주로 사용된다.
  • 해당 특정 사례를 제외하고 200 OK 응답이 300 상태 코드보다 선호된다. (200 OK 응답이 더 바람직하다는 의미)

204 (No Content)

  • 클라이언트의 요청이 성공적으로 처리되었지만 반환할 데이터나 콘테츠가 없다는 것을 나타내는 상태 코드이다.
  • 예를들어 클라이언트가 서버에 특정 요청을 보냈고 서버에서 이를 성공적으로 처리했는데 클라이언트에게 보낼 추가적인 데이터나 콘텐츠가 없을 때 204 상태 코드를 반환한다. 그러면 클라이언트는 요청이 성공적으로 완료되었다는 것만 알게 된다.

205 (Reset Content)

  • 클라이언트의 요청이 성공적으로 처리되었으며 클라이언트의 요청에 대한 콘텐츠를 재설정(초기화)해야 함을 나타내는 상태코드이다.
  • 일반적으로 폼 데이터와 관련이 있다. 예를 들어 클라이언트가 웹 폼을 제출한 후 서버가 성공적으로 요청을 처리하고 서버가 클라이언트에게 폼을 재설정하라는 지시를 전달한다.

206 (Partial Content)

  • 클라이언트가 Range 헤더를 사용하여 특정 리소스의 일부분만 요청을하고 서버가 요청된 부분적인 데이터를 성공적으로 반환했을 때 나타내는 상태 코드이다. 주로 대용량 파일이나 리소스를 부분적으로 전송할 때 사용된다.

207 (Multi-Status)

  • 클라이언트가 여러 리소스에 대한 상태 정보를 요청하면 서버가 여러 리소스의 상태 정보를 포함한 응답을 반환할 때 사용하는 상태 코드이다. 
  • 응답 본문에는 각 리소스에 대한 개별적인 상태 정보가 포함되어 있다.
  • 주로 WebDAV(웹 분산 저작 프로토콜)와 관련된 요청에서 사용된다.
    • WebDAV(Web Distributed Authoring and Versioning)는 HTTP 프로토콜의 확장으로, 웹 서버에서 원격으로 파일을 관리하고 편집할 수 있도록 하는 프로토콜이다. 주로 문서의 작성, 수정, 삭제, 이동, 복사 등을 지원한다.

208 (Multi-Status)

  • 클라이언트의 요청에 대해 여러 리소스의 상태를 보고할 때 사용되며, 이미 보고된 리소스에 대한 중복 보고를 피하기 위해 사용되는 상태 코드입니다. 
  • 주로 WebDAV와 관련된 요청에서 사용되며 <dav:propstat> 응답 요소 내에서 효율성을 높이는 역할을 합니다.
    • <dav:propstat>는 WebDAV(XML 기반의 프로토콜)에서 사용되는 XML 요소로, 리소스의 속성과 그 상태 정보를 나타낸다. 이 요소는 주로 클라이언트가 요청한 리소스의 속성을 요청한 결과를 포함하는 응답에 사용된다.
    • 주요 구성은 속성 정보(dav:prop)와 속성 상태(dav:status)로 되어 있다.
    • 속성은 파일의 메타데이터나 상태를 설명하는 정보를 담고 있다.
    • 상태는 각 속성 요청에 대한 결과 상태를 나타낸다.

226 (IM Used)

  • 클라이언트의 GET 요청이 성공적으로 처리되었으며, 요청된 리소스의 상태 정보가 인스턴스 조작을 통해 사용되었음을 나타내는 상태 코드입니다. 주로 PATCH 메서드와 관련하여 사용됩니다.
    • 인스턴스 조작(instance manipulation)이란 특정 리소스의 상태나 내용을 수정, 변경, 업데이트하는 작업을 의미한다. 주로 클라이언트의 요청에 따라 이루어지며, 서버는 이러한 요청에 따라 리소스를 업데이트한다.

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

요청한 리소스가 다른 위치에 있음을 나타내며, 클라이언트는 새로운 URL로 요청해야 한다.

305 (Use Proxy)는 프록시의 대역 내 구성과 관련된 보안 문제로 인해 중단되었다고 한다.

상태 코드 상태 이름
300 Multiple Choice
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
306 unused
307 Temporary Redirect
308 Permanent Redirect

 

300 (Multiple Choice)

  • 클라이언트가 요청한 리소스에 대해 여러 선택지가 있을 때 서버는 선택지 목록을 제공한다.
  • 이때 클라이언트는 어떤 선택지를 사용할지 선택해야한다.
  • 클라이언트가 응답 중 하나를 선택하는 방법에 대한 표준화 된 방법은 존재하지 않다.

301 (Moved Permanently)

  • 클라이언트로부터 요청받은 리소스가 더 이상 원래 위치에 없으며, Location 헤더의 URL로 영구적으로 이동했음을 나타낼 때 사용되는 상태 코드이다.
  • 이 상태를 수신한 브라우저는 자동으로 Location 헤더의 URL에서 리소스를 요청하여 사용자를 새 페이지로 리디렉션한다. 응답을 수신한 검색 엔진은 원래 URL로 링크를 리디렉션된 리소스에 귀속시켜 SEO 순위를 새 URL로 전달한다.
  • 웹사이트의 URL 구조가 변경되었을 때, SEO 최적화를 위해 페이지의 새로운 주소로 모든 트래픽을 유도하고 싶을 때 사용된다.

302 (Found)

  • 클라이언트로부터 요청된 리소스가 일시적으로 다른 URI로 리디렉션되었음을 나타내는 상태 코드이다. 서버는 클라이언트에게 다른 URL로 요청을 해달라는 메시지를 보내며, 클라이언트는 이를 수신하고 Location 헤더에 지정된 URI로 자동으로 요청을 리디렉션한다.
  • URI가 나중에 더 변경될 수 있으므로 클라이언트는 향후 요청에서 동일한 URI를 사용해야 합니다.
  • 예를들어 웹사이트에서 유지 보수를 위해 특정 페이지를 임시로 다른 URL로 리디렉션할 때, A/B 테스트를 위해 특정 사용자를 다른 페이지로 리디렉션할 때 사용된다.
    • URI(Uniform Resource Identifier)이다. URI는 URL(Uniform Resource Locator)의 더 넓은 개념으로, 리소스를 식별하는 방법을 포함한다. URL은 특정 리소스에 대한 주소를 나타내지만, URI는 리소스를 식별하는 더 일반적인 방식이다.

303 (See Other)

  • 서버는 GET 요청을 통해 다른 URI에서 요청한 리소스를 가져오도록 클라이언트에게 지시하기 위해 이 응답을 보낼 때 사용되는 상태 코드이다.
  • 클라이언트가 서버에 POST 요청을 보내고 서버에서는 이 요청을 처리하고 303상태 코드와 함께 Location 헤더에 새로운 URI를 포함하여 응답한다. 그러면 클라이언트는 이 응답을 받고 Location 헤더에 지정된 URI로 GET 요청을 자동으로 보내게 된다.

304 (Not Modified)

  • 캐싱 목적으로 사용되며, 클라이언트가 요청한 리소스가 이전에 캐시된 버전과 동일하다는 것을 서버가 알려주는 상태 코드이다.

306 (unused)

  • 더 이상 사용되지 않지만 예약되어 있다. 이전 버전의 HTTP/1.1 사양에서 사용되었다.
  • 예약되어 있다는 의미는 현재 사용을 안 하는 상태 코드이지만 언제든 사용할 수 있다는 의미인 거 같다.

307 (Temporary Redirect)

  • 서버가 클라이언트에게 요청한 리소스가 일시적으로 다른 URI로 이동했음을 알리기 위해 사용된다. 이 응답을 받은 클라이언트는 이전 요청에서 사용된 HTTP 메서드와 동일한 방법으로 새 URI로 요청을 다시 보내야 한다.
  • 302 Found 응답 코드와 유사한 의미를 가지지만, 307 상태 코드는 클라이언트가 사용된 HTTP 메서드를 변경하지 않도록 명확히 지시한다. 예를 들어, 첫 번째 요청에서 POST 메서드를 사용한 경우, 리디렉션된 요청에서도 POST 메서드를 사용해야 한다.

308 (Permanent Redirect)

  • 리소스가 이제 Location 응답 헤더에서 지정한 다른 URI에 영구적으로 위치한다는 것을 의미한다.
  • 301 Moved Permanently HTTP 응답 코드와 동일한 의미를 갖지만, 클라이언트가 사용된 HTTP 메서드를 변경해서는 안 된다. 이 말은 첫 번째 요청에서 POST가 사용된 경우 두 번째 요청에서도 POST를 사용해야 한다는 의미다.

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

요청에 문제가 있음을 나타낸다.

상태 코드 상태 이름
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Payload Too Large
414 URI Too Long
415 Unsupported Media Type
416 Requested Range Not Satisfiable
417 Expectation Failed
418 I'm a teapot
421 Misdirected Request
422 Unprocessable Entity 
423 Locked
424 Failed Dependency
426 Upgrade Required
428 Precondition Required
429 Too Many Requests
431 Request Header Fields Too Large
451 Unavailable For Legal Reasons

 

400 Bad Request)

  • sample

401 (Unauthorized)

  • sample

402 (Payment Required)

  • sample

403 (Forbidden)

  • sample

404 (Not Found)

  • sample

405 (Method Not Allowed)

  • sample

406 (Not Acceptable)

  • sample

407 (Proxy Authentication Required)

  • sample

408 (Request Timeout)

  • sample

409 (Conflict)

  • sample

410 (Gone)

  • sample

411 (Length Required)

  • sample

412 (Precondition Failed)

  • sample

413 (Payload Too Large)

  • sample

414 (URI Too Long)

  • sample

415 (Unsupported Media Type)

  • sample

416 (Requested Range Not Satisfiable)

  • sample

417 (Expectation Failed)

  • sample

418 (I'm a teapot)

  • sample

421 (Misdirected Request)

  • sample

422 (Unprocessable Entity)

  • sample

423 (Locked)

  • sample

424 (Failed Dependency)

  • sample

426 (Upgrade Required)

  • sample

428 (Precondition Required)

  • sample

429 (Too Many Requests)

  • sample

431 (Request Header Fields Too Large)

  • sample

451 (Unavailable For Legal Reasons)

  • sample

5xx (서버 오류 응답)

서버가 요청을 처리하는 동안 오류가 발생했음을 나타냅니다.

상태 코드 상태 이름
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
506 Variant Also Negotiates
507 Insufficient Storage
508 Loop Detected
510 Not Extended
511 Network Authentication Required

 

500 (Internal Server Error)

  • 이 상태 코드는 서버에서 요청을 처리하는 중에 예기치 않은 오류가 발생했음을 나타낸다. 서버 측의 문제로, 클라이언트가 요청한 작업을 수행할 수 없음을 의미한다.

501 (Not Implemented)

  • 요청된 메서드가 서버에서 지원되지 않거나 처리할 수 없음을 나타낸다. 서버는 요청된 HTTP 메서드를 이해하지 못하거나 해당 기능이 구현되어 있지 않은 경우 이 상태 코드를 반환한다.
  • 서버가 반드시 지원해야 하는 메서드는 GET과 HEAD로, 이 두 메서드에 대해서는 501 상태 코드가 반환되어서는 안 된다.

502 (Bad Gateway)

  • 이 상태 코드는 서버가 요청을 처리하는 데 필요한 응답을 얻기 위한 게이트웨이 역할을 하는 동안 잘못된 응답을 받았음을 의미한다.
  • 서버가 게이트웨이 또는 프록시로서 역할을 수행할 때, 상위 서버로부터 잘못된 응답을 받았을 때 나타나는 상태 코드이다. 즉, 서버가 다른 서버에 요청을 보냈지만, 그 서버가 유효한 응답을 반환하지 않았다는 것을 의미한다.

503 (Service Unavailable)

  • sample

504 (Gateway Timeout)

  • sample

505 (HTTP Version Not Supported)

  • sample

506 (Variant Also Negotiates)

  • sample

507 (Insufficient Storage)

  • sample

508 (Loop Detected)

  • sample

510 (Not Extended)

  • sample

511 (Network Authentication Required)

  • sample

 


 

자료: