HTTP | message(status codes)

서버에서 받은 요청을 응답하는 메세지에는 HTTP 상태 코드 를 담아서 보냅니다. 상태 코드에는 요청한 HTTP 의 응답 메세지인 정보 응답, 성공 응답, 리다이렉션 완료, 클라이언트 오류, 서버 오류 5가지 정보를 코드로 나타냅니다.

100 번대 : 정보 응답 (Informational)

100 번대 코드는 요청을 받고 있는 상태에서 처리를 수행하고 있는 중이라는 것을 알리기 위한 코드 입니다. HTTP/1.1 버전에서 공개 되었습니다.

  • 100 (Continue) : 지금까지의 요청을 성공적으로 수행되고 있다는 응답입니다. 본문 내용을 보내도 유효하다는 표현이며 일반적으로는 무시하고 작업을 이어나가면 됩니다.
  • 101 (Switching Protocol) : 서버가 프로토콜을 바꾸었다는 응답 코드 입니다.

200 번대 : 성공 응답 (Success)

200 번대 코드는 요청을 정상적으로 처리 되었을 떄 반환되는 코드 입니다.

  • 200 (OK) : 요청에 정상적으로 처리 되었다는 코드입니다.
  • 201 (Created) : 보통 PUT 요청 이후에 나오는 코드로서 새로운 리소스가 생성되었음을 알리는 코드 입니다.(리소스의 구체적 정보와 함께)
  • 202 (Accepted) : 요청은 받아들여 졌으나 서버는 어떤 동작을 하지 않았을 경우 입니다.
  • 203 (Non-Authoritative Information) : 서버가 요청을 정상적으로 처리 되었으나 리소스의 메타정보를 검증하지 않은 사본일 수 있는 리소스를 보여줄 경우 입니다.
  • 204 (No Content) : 본문이 없는 경우 입니다. 주로 새 문서로 이동하지 않고 새로고침할 떄 나타납니다.
  • 205 (Reset Content) : html 폼 내부의 값을 모두 비워진다는 내용입니다. 현재 문서를 초기화 합니다.
  • 206 (Partial Content) : 어떤 한 부분이나 일부를 지정한 요청에 정상적으로 처리 되었을 때 입니다. Content-Range 와 Date 헤더를 반드시 포함 해야 하며 Etag 와 Content-Location 중 하나의 헤더도 반드시 포함해야 합니다.

300 번대 : 리다이렉션 완료

300 번대 코드는 리다이렉션이 되었다는 코드로서 요청한 리소스에 대해 다른 위치에 있다는 정보(location 헤더 정보)를 주거나 다른 대안을 줄 경우 입니다.

  • 300 (Multiple Choice) : 요청 내용에 동시에 여러 리소스를 가리키는 URL 일 경우에 나타납니다. 사용자는 반환되는 목록에서 하나를 선택할 수 있습니다.
  • 301 (Moved Permanently) : 요청한 URL 이 옮겨 졌을 경우 입니다. 옮겨진 URL 을 알려줍니다.
  • 302 (Found) : 요청한 URL 는 임시적으로 새로운 URL 이 나타납니다. 이후에는 원래 URL 을 사용합니다.
  • 303 (See Other) : 요청에 대한 리소스가 다른 URL 에 있다고 알려주는 메세지 입니다. 주로 POST 에 대한 응답으로서 GET 메서드를 사용하여 리소스를 얻어야 한다고 알려주는 메세지 입니다.
  • 304 (Not Modified) : 요청한 리소스가 마지막 요청 이후 변경된 적이 없기 때문에 캐시 리소스를 사용하라고 알려줍니다.
  • 305 (Use Proxy) : 특정 리소스는 반드시 프락시를 통해서 접근되어야 함을 알려주는 메세지 입니다.
  • 307 (Temporary Redirect) : 요청된 리소스의 URL 이 임시로 옮겨졌음을 알려줍니다. 임시로 옮겨진 URL 을 사용하라고 알려줍니다. 이후에는 이전 URL 을 사용해야 합니다.

400 번대 : 클라이언트 오류

400 번대 코드는 서버가 처리할 수 없는 메세지를 클라이언트에서 요청했을 경우 나타납니다.

  • 400 (Bad Request) : 요청에 문법적 오류가 있음을 알려줍니다.
  • 401 (Unauthorized) : 리소스를 얻기 전에 클라이언트에게 인증을 요구하는 메세지 입니다.
  • 402 (Payment Required) : 서버의 요청을 받기 위해서는 비용을 지불해야 한다는 메세지 입니다(아직 구현되지는 않습니다.)
  • 403 (Forbidden) : 요청이 거부 되었음을 알려줍니다. 요구 거부 사유를 알려줄 수 없을 경우 쓰입니다.
  • 404 (Not Found) : 요청한 URL 이 없음을 알려줍니다.
  • 405 (Method Not Allowed) : 요청한 URL 에 대해 지원하지 않는 메서드로 요청했음을 알려줍니다. Allow 헤더를 통해서 유효한 메서드 정보를 보내줍니다.
  • 406 (Not Acceptable) : 요청한 리소스는 존재하지만 클라이언트가 원하는 형식이 아닌 경우 입니다.
  • 407 (Proxy Authentication Required) : 401 과 비슷하지만 프락시 서버에서 인증을 해야 함을 알립니다.
  • 408 (Request Timeout) : 요청을 완료하기에 지정한 시간을 초과함을 알려줍니다. 이후 서버는 네트워크를 끊습니다.
  • 409 (Conflict) : 요청이 충돌을 일으킬 수 있음을 서버에서 판단했음을 알려줍니다.
  • 410 (Gone) : 요청한 리소스가 과거에 있었으나 지금은 사라졌음을 알려줍니다.
  • 411 (Length Required) : 요청 메세지에 Content-Length 헤더가 있어야 함을 요구할 떄 사용합니다.
  • 412 (Precondition Failed) : 조건부 요청에 대해서 그 중 하나를 처리하지 못했을 경우 입니다. (조건부 요청은 Expert 헤더 포함할 경우)
  • 413 (Request Entity Too Loarge) : 요청 본문의 크기가 서버의 처리 한계를 넘은 요청을 했을 경우 입니다.
  • 414 (Request URI Too Long) : 요청 URL 길이가 서버의 처리 한계를 넘은 요청을 했을 경우 입니다.
  • 415 (Unsupported Media Type) : 요청 본문의 내용이 서버가 지원하지 않는 형식일 경우 입니다.
  • 416 (Requested Range Not Satisfiable) : 요청 내용이 리소스의 특정 범위인데, 범위내 내용이 틀렸을 경우 입니다.
  • 417 (Expectation Failed) : 요청 내용 중 Expect 헤더에서 명시된 조건이 만족될 수 없는 경우 입니다.

500 번대 : 서버 오류

500 번대 코드는 올바른 요청이었는데 서버 자체에서 에러가 발생한 경우 나타납니다.

  • 500 (Internal Server Error) : 서버가 멈추었거나 설정에서 오류가 나타났을 경우 입니다.
  • 501 (Not Implemented) : 요청이 서버의 능력을 넘었을 경우 입니다.
  • 502 (Bad Gateway) : 게이트웨이나 프락시 역할을 수행하는 서버가 요구를 완료하려는 시도에 접근한 업스트림(upstream) 서버로부터 에러를 수신했을 경우 입니다.
  • 503 (Service Unavailable) : 현재는 요청을 처리할 수 없지만 곧 복구되어 처리가 가능할 것입을 알려줍니다.
  • 504 (Gateway Timeout) : 408 과 같지만 게이트웨이나 프락시 서버의 경과 시간을 의미합니다.
  • 505 (HTTP Version Not Supported) : 서버가 지원하지 않는 HTTP 버전을 사용하였을 경우 입니다.

HTTP 통신의 결과 코드를 알아봤습니다. 사실, 내용을 정리하면서 아직 이해가 안되는 내용도 많이 있습니다. 웹 프로그래밍시 응답코드에 따라서 적정한 대응을 할 수 있는 프로그래밍을 해야 겠습니다.

http web network