저번 글에서는 HTTP 메시지의 전반적인 구조와 메서드에 대해 다뤘다. 이번 글에서는 상태코드에 대해 상세히 알아보자.
상태 코드는 서버가 클라이언트에게 응답을 보낼 때 포함된다. 서버는 상태 코드를 클라이언트의 요청을 잘 처리했는지, 처리하지 못했다면 어떤 문제가 있었는지 알려주기 위해 사용한다. 상태 코드는 세 자리의 숫자인데, 제일 큰 자리의 숫자가 해당 상태 코드의 종류를 나타낸다.
전체범위 | 정의된 범위 | 분류 |
---|---|---|
100 - 199 | 100 - 101 | 정보 |
200 - 299 | 200 - 206 | 성공 |
300 - 399 | 300 - 305 | 리다이렉션 |
400 - 499 | 400 - 415 | 클라이언트 에러 |
500 - 599 | 500 - 505 | 서버 에러 |
위에서 정의된 범위는 HTTP 명세에 의해 정의된 상태 코드를 의미한다. 정의된 범위를 벗어난 상태 코드는, 사용자 정의된 상태 코드이다. HTTP 명세에 의해 정의된 상태 코드를 하나 하나 살펴보자.
HTTP 1.1에서 도입된 코드이다.
100 Continue 상태는 서버가 클라이언트의 요청 일부를 처리했고 나머지를 보내라는 의미이다. 이 상태 코드는 클라이언트가 본격적으로 요청 메시지를 보내기 전에, 해당 메시지를 서버가 처리할 수 있는지 확인하기 위한 용도로 사용된다.
이 상태 코드가 사용되는 시나리오는 아래와 같다.
클라이언트는 Upgrade 헤더를 통해, 클라이언트와 서버가 사용할 프로토콜을 바꿀 것을 요청할 수 있다. 서버는 이러한 요청을 받았을 때, 성공적으로 프로토콜을 바꿨다는 것을 나타내기 위해 101 상태 코드가 담긴 응답 메시지를 보낼 수 있다. 프로토콜을 바꾸는데 실패했을 경우 사용해야하는 상태 코드는 없다. 일반적으로 400 상태 코드를 사용한다는 Bing AI의 응답을 받을 수 있었다.
상태 코드 | 사유 구절 | 의미 |
---|---|---|
200 | OK | 엔터티 본문은 요청된 리소스를 포함하고 있다. |
201 | Created | PUT과 POST와 같이 서버에 자원을 생성하라는 요청에 대한 성공적인 응답. 서버는 리소스에 대한 Location 헤더와 리소스를 나타내는 여러 URL을 엔터티 본문에 포함하여 응답 메시지를 보낸다. |
202 | Accepted | 요청은 받아들여졌지만 서버가 아직 동작을 수행하지 않았다는 의미. 서버가 동작을 수행하여 요청을 완료하리라는 보장은 없다. 서버는 엔터티 본문에 요청에 대한 상태와 요청의 처리가 언제 완료될 것인지에 대한 추정을 포함하여 응답 메시지를 보낸다. |
203 | Non-Authoritative Information | 엔터티 본문의 속성을 지정하는 엔터티 헤더에 들어있는 정보가, 원래 서버가 아닌 리소스의 사본에서 왔다. 프록시와 같은 중개자가 리소스의 사본을 갖고 있었지만 리소스에 대한 메타 정보(헤더)를 검증하지 않은 경우 프록시는 이런 상태 코드를 포함하여 응답 메시지를 보낼 수 있다. |
204 | No Content | 서버가 보낸 응답 메시지에 엔터티 본문이 비어있다. 일반적으로 클라이언트가 보낸 요청을 서버가 성공적으로 처리했지만 웹 브라우저가 새로운 페이지로 이동할 필요가 없다는 의미를 갖는다. |
205 | Reset Content | 브라우저에게 현재 페이지에 있는 HTML 폼에 채워진 모든 값을 비울 것을 서버가 요청할 때 사용한다. |
206 | Partial Content | 범위 요청이 성공했다. |
이번 글에서는 HTTP 상태 코드 중에서 100-299 범위에 정의된 상태 코드를 살펴봤다. 다음 글에서는 300대 상태 코드를 살펴보자.