Status Codes

raccoonback·2020년 7월 7일
1

Network

목록 보기
4/7
post-thumbnail

이 글은 그림으로 배우는 HTTP & NetworkHTTP 완벽 가이드 서적을 참고해 작성하였습니다.

클라이언트가 서버로 요청했을때 서버에서 그 결과가 어떻게 처리되었는 지를 알려주는 것이 Status Codes의 역할이다. 이를 통해서 서버가 요청을 정상적으로 처리했는지 아니면 에러가 발생했는지를 클라이언트에서 알 수 있다.

HTTP 명세에 따르면, 상태 코드는 3자리 숫자와 그에 대한 설명을 나타내는데 팀 내부적으로 3자리 이상의 숫자를 커스텀하게 사용할 수도 있다.

아래는 HTTP 명세 표준을 나타낸 것인데, 3자리 숫자 중 첫 번째 자리의 숫자로 의미를 구분한다.

그럼 각 클래스 별로 대표적인 상태 코드를 하나씩 살펴보자.

2XX

2XX 상태 코드는 서버가 요청을 정상적으로 처리했다는 것을 의미한다.

200 OK

클라이언트가 보낸 요청을 서버가 정상 처리했다는 것을 나타내고, 요청 메소드에 따라 응답 본문은 달라진다.

예를 들어, GET 메소드 경우에는 요청에 대응하는 엔티티가 응답으로 보내진다.

204 No Content

204 상태 코드는 서버가 요청을 정상적으로 처리했지만 응답 메시지에 Entity Body를 포함하지 않는다는 것을 의미한다.

204 상태 코드는 클라이언트에 보낼 새로운 정보가 없을 경우에 사용된다.

206 Partial Content

206 상태 코드는 Range 헤더를 가진 GET 요청을 받았다는 것을 의미함과 동시에, Range 헤더에 의해서 지정된 범위에 해당하는 리소스를 Entity Body로 응답했다는 것을 의미한다.

참고 자료

3XX

3XX 상태 코드는 전달받은 요청을 정상적으로 완료하기 위해서, 브라우저 측에 추가적인 처리가 필요함을 의미한다.

301 Moved Permanently

301 상태 코드는 요청에 대응하는 리소스가 다른 URI로 이동했으므로, 해당 리소스를 참조하기 위해서는 변경된 URI로 요청을 다시 보내야 한다는 것을 의미한다.

301 상태 코드를 받은 브라우저는 Location 응답 헤더를 참고해서 재요청을 보낸다.

HTTP/1.1 301 Moved Permanently
Location: http://www.something.com/index.html

302 Found

302 상태 코드도 301과 유사하게 리소스에 새로운 URI가 할당되었음을 의미하지만, 일시적인 이동임을 나타낸다.

또한, 302 상태 코드도 브라우저가 Location 응답 헤더를 참고해서 재요청을 보낸다.

굳이 일시적인 이동인 것을 나타내는 이유는 검색 엔진(봇)에서 새로운 URI로 링크를 갱신하지 않게 하기 위함이다.

303 See Other

303 상태 코드는 요청에 대한 리소스가 다른 URI에 있기 때문에 반드시 GET 메소드를 사용해서 요청해야 한다는 것을 의미한다.

302와 유사하지만, 리다이렉트 장소에 GET 메소드로 요청해야 한다는 것을 명확하게 지정한다.

예를 들어, 어떠한 작업을 POST 메소드로 처리하고 결과를 별도의 URI에서 GET 메소드로 리다이렉트 시키고 싶은 경우 303 상태 코드를 사용한다.

304 Not Modified

304 상태 코드는 클라이언트가 조건부 요청한 경우에 리소스에 대한 접근은 허락하지만, 조건이 충족되지 않았음을 의미한다.

주로 캐시에서 If-None-Match 또는 If-Modified-Since 헤더에 대한 응답에서 사용되고, 반드시 응답 Entity Body에 아무 것도 포함해선 안된다.

307 Temporary Redirect

307 상태 코드는 302와 같은 의미지만, 메소드가 변경되지 않고 Location 응답 헤더로 리다이렉트한다.

참고 자료

4XX

4XX 상태 코드는 클라이언트의 원인으로 에러가 발생했다는 것을 의미한다.

400 Bad Request

400 상태 코드는 요청 구문이 잘못되었다는 것을 의미한다.

400 상태 코드를 받으면, 요청 내용을 다시 검토해 재요청할 필요가 있다.

브라우저는 이에 대한 대응을 따로 하지 않습니다.

401 Unauthorized

401 상태 코드는 요청한 Request Message에 HTTP 인증 정보가 필요하다는 것을 의미한다.

401 응답은 리소스를 얻기 위해 필요한 인증 정보를 WWW-Authenticate 헤더에 포함해 전달한다.

HTTP/1.1 401 Unauthorized 
Date: Fri, 23 Oct 2009 11:32:20 GMT
WWW-Authenticate: Basic realm="Access to staging site"

403 Forbidden

403 상태 코드는 요청한 리소스의 접근이 권한때문에 거부되었다는 것을 의미한다.

리소스의 접근이 거부 이유에 대해서는 Entity Body에 전달할 수 있는데, 반드시 이유를 전달하는 것을 권장한다.

404 Not Found

404 상태 코드는 요청한 리소스가 서버상에 없다는 것을 의미한다.

404 상태 코드를 서버측에서 해당 요청에 대해 거부하는 경우에도 사용할 수 있는데, 이러한 경우에는 클라이언트 입장에서는 Not Found 의미와 다르기 때문에 헷갈리게 하는 구석이 있다.

이러한 모호함을 그나마 해소하기 위해서는 Entity Body에 거부 이유를 명확하게 기재하는 것을 권장한다.

만약 리소스가 영구적으로 삭제되었다는 의미를 나타내기 위해서는 404가 아닌 410(Gone) 상태 코드를 사용해야 한다.

참고 자료

5XX

5XX 상태 코드는 서버 원인으로 에러가 발생하고 있음을 의미한다.

500 Internal Server Error

500 상태 코드는 서버에서 요청을 처리하는 도중에 예기치 못한 에러가 발생했다는 것을 의미한다.

500 에러는 서버 에러 총칭하는 의미이기 때문에 이유가 될만한 구체적인 내용은 Entity Body에 포함하는 것을 권장한다.

503 Service Unavaliable

503 상태 코드는 일시적으로 서버가 과부하 상태이거나 점검중이기 때문에 현재 요청을 처리할 수 없다는 것을 의미한다. 즉, 서버가 요청을 처리할 준비가 되지 않았음을 나타낸다.

또한, 서비스 복구하기 위한 예상 시간을 Retry-After 응답 헤더에 전달하는 것을 권장한다.

참고 자료

참고 자료

profile
한번도 실수하지 않은 사람은, 한번도 새로운 것을 시도하지 않은 사람이다.

0개의 댓글