HTTP Status Code

HTTP Status Code

HTTP 프로토콜은 응답으로 스테이터스 코드를 보낸다.

이 스테이터스 코드를 보고 우리는 처리가 잘 되었는지, 오류가 발생하였는지 등 정보를 알 수 있다.

지금부터 Status Code에 대해서 알아보자.

1XX : 처리중

100 Continue

  • 바디 : 없음
  • 관련 메서드 : 모두
  • 요청 헤더 : Expect

Expect 헤더에 100-continue를 넣어서 요청을 송신하면 요청 헤더를 다 보낸 시점에 서버가 100 Continue를 반환한다.

이 요청을 보냄으로써 서버가 해당 요청을 처리가능한지 여부를 알 수 있게 된다.

1기가 짜리 비디오를 POST하는 예를 보자.

POST /foo/bar/HTTp/1.1
HOST: example.com
Expect: 100-continue
Content-Type: video/mpeg
Content-Length: 1073741824

클라이언트가 헤더를 보내고 대기하며 서버는 이 요청을 처리 가능하다면 100 Continue를 반환한다.

클라이언트는 서버측에서 100 Continue 메세지를 받는다면 다시 POST를 보내는데 이때는 Except 헤더를 포함하지 않는다.

POST /foo/bar/HTTp/1.1
HOST: example.com
Content-Type: video/mpeg
Content-Length: 1073741824

만약 서버가 Expect 헤더에 100-continue를 지정한 요청을 처리할 수 없다고 판단한 경우, 에러를 반환한다.

만약 송신한 데이터가 너무 크다면 413 Request Entity Too Larger를 반환하며 지원하지않는 미디어 타입이라면 415 Unsupported Media Type을 반환한다.

서버가 Except 헤더에 대응하지 않는 경우라면 417 Expectation Failed를 반환한다.

101 Switching Protocols

  • 바디 : 없음
  • 관련 메서드 : 모두
  • 요청 헤더 : Upgrade

이용할 프로토콜을 업그레이드할 때 사용한다.

만약 HTTP 1.1을 사용한다면 HTTP 2.0으로 업그레이드할 수 있다.

현재 HTTP 3이 등장했으므로 3까지 업그레이드 가능하다.

2XX : 성공

200 OK

  • 바디 : GET의 경우 리소스의 표현, 그 밖의 메서드는 처리결과
  • 관련 메서드 : 모두

요청이 성공한 경우

가장 자주 볼 수 있는 상태 코드

201 Created

  • 바디 : 신규 작성된 리소스의 표현, 혹은 처리결과의 설명
  • 관련 메서드 : POST,PUT
  • 요청 헤더 : Location

요청이 성공해서 새로운 리소스를 작성했다는 것을 나타낸다.

요청이 POST인 경우 Location 헤더에는 새로운 리소스의 URI가 절대 URI로 들어간다.

202 Accepted

  • 바디 : 처리결과를 얻을 수 있는 리소스의 링크와 예상처리 시간
  • 관련 메서드 : 모두
  • 요청 헤더 : Location,Retry-After

클라이언트로부터 요청은 받았지만 서버 측에서 처리가 완료되지 않음을 나타내는 상태코드.

일반적으로 POST와 PUT으로 리소스를 작성 또는 갱신했을 때 처리 시간이 많이 걸리는 경우에 반환한다.

Retry-After 헤더는 지정된 시간이 지나면 Location 헤더에 지정된 URI를 가져와 처리결과를 얻는다.

203 Non-Authoritative Information

  • 바디 : GET의 경우는 리소스의 표현, 그 밖의 메서드는 처리결과
  • 관련 메서드 : 모두

응답 헤더가 오리지널 서버로부터 제공된 것이 아님을 나타낸다.

리소스에 대해 프록시가 주석을 헤더에 덧붙인 경우 등에 해당한다.

그 밖의 경우 200 OK와 같다.

204 No Content

  • 바디 : 없음
  • 관련 메서드 : POST,PUT,DELETE

요청이 성공했지만 클라이언트에게 돌려보낼 콘텐츠가 없다는 것을 나타낸다.

전형적인 예는 DELETE 응답이 여기에 해당한다.

205 Reset Content

  • 바디 : 없음
  • 관련 메서드 : 모두

요청이 성공하여 브라우저를 리셋하고 다음 동작으로 옮겨가는 것을 나타낸다.

206 Partial Content

  • 바디 : 지정된 범위의 리소스 표현
  • 관련 메서드 : GET
  • 요청 헤더 : Range, If-Range
  • 응답 헤더 : Content-Range

GET할 때 Range 헤더에 리소스의 범위를 바이트로 지정하면 리소스의 일부만을 얻을 수 있다.

이것을 부분적 GET (Partial GET)이라고 부른다.

이 스테이터스 코드는 부분적 GET이 성공했다는 의미이다.

3XX : 리다이렉트

300 Multiple Choices

  • 바디 : 후보 URI의 리스트
  • 관련 메서드 : 모두

지정한 URI에 대해 콘텐트 네고시에이션을 수행한 결과 서버측에서 후보를 하나로 만들 수 없을 때 클라이언트에게 복수의 호부에 대한 링크를 반환하기 위해 사용

301 Moved Permanently

  • 바디 : 이동할 곳의 URI 링크를 포함한 HTML
  • 관련 메서드 : 모두
  • 응답 헤더 : Location

지정한 리소스가 새로운 URI로 이동했다는 것을 나타낸다. 이동할 곳의 URI는 Location 헤더로 나타낸다.

303 See Other

  • 바디 : 이동할 곳의 URI 링크를 포함한 HTML
  • 관련 메서드 : POST
  • 응답 헤더 : Location

요청에 대한 처리결과를 Location 헤더에 표시되는 URI에서 GET으로 취득할 수 있다는 것을 나타낸다.

예를 들어 브라우저 폼을 통해 POST로 처리를 수행하고, 그 응답으로서 결과하면으로 리다리엑트할 때 사용한다.

304 Not Modified

  • 바디 : 없음
  • 관련 메서드 : GET
  • 요청 헤더 : If-Modified-Since, If-None-Match
  • 응답 헤더 : ETag, Last-Modified

조건부 GET일 때, 리소스가 갱신되지 않았다는 것을 보여준다.

305 Use Proxy

  • 바디 : 프록시가 필요하다는 것을 설명하는 HTML
  • 관련 메서드 : 모두
  • 응답 헤더 : Location

이 리소스에 액세스 하기 위해서는 지정된 프록시를 통할 필요가 있다는 것을 의미

응답의 Location 헤더에 프록시의 URI가 들어간다.

307 Temporary Redirected

  • 바디 : 이동할 곳의 URI 링크를 포함한 HTML
  • 관련 메서드 : 모두
  • 응답 헤더 : Location

요청한 URI가 존재하지 않기 때문에 클라이언트는 Location 헤더가 가리키는 새로운 URI로 요청을 재송신할 필요가 있음을 나타낸다.

4XX : 클라이언트 에러

400 Bad Request

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

요청의 구문이 잘못되었다는 것을 나타낸다.

클라이언트가 모르는 4XX 계열 스테이터스 코드가 반환되었을 경우 400 Bad Request와 동일하게 다루도록 스펙으로 정해져 있다.

401 Unauthorized

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 요청 헤더 : Authorization
  • 응답 헤더 : WWW-Authenticate

적절한 인증정보 없이 리소스에 액세스 하려고 할 때 나타내는 오류

403 Forbidden

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

401 에러가 클라이언트가 적절한 인증정보를 제시하지 않아서 발생한 오류였다면 403 에러는 그 밖의 이유로 리소스를 조작할 수 없음을 나타낸다.

예를들어 특정 IP 어드레스만 접근할 수 없는 경우 등에 사용한다.

404 Not Found

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

지정한 리소스를 찾을 수 없다는 것을 나타낸다.

특정 웹사이트에 접속했을 때 가장 많이 만나는 에러이다.

405 Method Not Allowed

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 응답 헤더 : Allow

요청한 URI가 지정한 메서드를 지원하지 않는다는 것을 나타낸다.

응답에는 Allow 헤더가 포함되며 이 URI가 지원하는 메서드 목록이 표시된다.

406 Not Acceptable

  • 바디 : 후보 URI 리스트
  • 관련 메서드 : 모두
  • 요청 헤더 : Accept, Accept-Charset, Accept-Language, Accept-Encoding, Accept-Range

클라이언트가 Accept-* 헤더에서 지정한 표현을 반환할 수 없음을 나타낸다.

407 Proxy Authentication Required

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 요청 헤더 : Proxy-Authorization
  • 응답 헤더 : Proxy-Authenticate

프록시 인증이 필요하다는 것을 나타낸다.

응답의 Proxy-Authenticate 헤더에는 인증 방식이 들어간다.

클라이언트는 그 인증방식에 따라 Proxy-Authorization 헤더에 인증정보를 넣어 요청을 재송신한다.

408 Request Timeout

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 응답 헤더 : Connection

클라이언트가 요청을 아무리 기다려도 다 송신하지 못했기 때문에 서버 쪽에서 타임아웃했다는 것을 나타낸다.

클라이언트의 요청이 서버의 대기시간 내에 끝나지 않는 경우 서버는 408 Request Timeout을 반환하고 접속을 끊을 수 있다.

409 Conflict

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : PUT,POST,DELETE
  • 응답 헤더 : Location

요청이 요구한 리소스에 대한 조작이 리소스의 현재 상태와 모순됨을 나타낸다.

예를 들어, 비어 있지 않은 디렉터리를 삭제하려 한다거나 리소스의 이름이 이미 다른 곳에서 사용되고 있는데 변경하려고 하는 경우 등이 해당한다.

410 Gone

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

이 리소스가 이전에 존재했지만, 현재는 존재하지 않는다는 것을 나타낸다.

411 Length Required

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 요청 헤더 : Content-Length

클라이언트가 Content-Length 헤더를 송신해야만 한다는 것을 나타낸다.

412 Precondition Failed

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : PUT,POST
  • 요청 헤더 : If-Match, If-None-Match, If-Unmodified-Since
  • 응답 헤더 : ETag, Last-Modified

조건부 요청에서 클라이언트가 지정한 사전조건이 서버와 맞지 않는 경우

413 Request Entity Too Large

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 요청 헤더 : Connection

서버가 처리할 수 없을 만큼 요청 메시지가 크다는 것을 의미

서버는 클라이언트와의 접속을 끊음

414 Request-URI Too Long

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

서버가 처리할 수 없을 만큼 요청한 URI가 너무 길다는 에러

415 Unsupported Media Type

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : PUT,POST
  • 요청 헤더 : Content-Type

클라이언트가 지정한 미디어 타입을 서버에서 지원하지 않는 경우 반환하는 에러

예를들어 이미지 등록 웹 API에서 서버가 지원하는 형식은 JPEG,PNG인데 클라이언트가 GIF 이미지를 등록하려 할 경우 이 에러를 볼 수 있다.

416 Request Range Not Satisfiable

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 요청 헤더 : Range

클라이언트가 Range 헤더에서 지정한 범위의 리소스 사이즈와 맞지 않음을 나타낸다.

417 Expectation Failed

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 요청 헤더 : Expect

클라이언트가 지정한 Expect 헤더를 서버가 이해할 수 없다는 것을 나타낸다.

클라이언트가 요청의 Expect 헤더에 100-continue를 지정했음에도 불구하고 서버가 100-continue를 다룰 수 없는 경우에 사용한다.

5XX : 서버에러

500 Internal Server Error

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

서버측에서 에러가 발생했다는 것을 나타낸다.

501 Not Implemented

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

요청된 메서드를 이 URI에서 서버가 구현하고 있지 않음을 나타낸다.

502 Bad Gateway

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

프록시가 상류 서버에 요청을 보냈지만 처리가 정상적으로 종료하지 않았음을 나타낸다.

503 Service Unavailable

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두
  • 응답 메서드 : Retry-After

서버 점검 등으로 서비스를 제공할 수 없다는 것을 나타낸다.

응답의 Retry-After 헤더에 재개 시기를 통지할 수 있다.

504 Gateway Timeout

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

프록시가 상류 서버에 요청을 보냈지만 접속할 수 없는 경우

505 HTTP Version Not Supported

  • 바디 : 에러의 이유를 설명하는 문서
  • 관련 메서드 : 모두

클라이언트가 송신한 요청의 HTTP 버전을 서버가 지원하지 않음을 나타낸다.

Reference

KakaoTalk_Photo_2020-02-17-20-57-22

웹을 지탱하는 기술 - 부록



© 2022. by minkuk

Powered by minkuk