웹 서버 구현기 1-3 HTTP 메시지: 상태코드100 - 299

Plato·2023년 6월 5일
0

웹서버 구현기

목록 보기
4/11

서론

저번 글에서는 HTTP 메시지의 전반적인 구조와 메서드에 대해 다뤘다. 이번 글에서는 상태코드에 대해 상세히 알아보자.

본문

상태코드

상태 코드는 서버가 클라이언트에게 응답을 보낼 때 포함된다. 서버는 상태 코드를 클라이언트의 요청을 잘 처리했는지, 처리하지 못했다면 어떤 문제가 있었는지 알려주기 위해 사용한다. 상태 코드는 세 자리의 숫자인데, 제일 큰 자리의 숫자가 해당 상태 코드의 종류를 나타낸다.

상태 코드의 종류

전체범위정의된 범위분류
100 - 199100 - 101정보
200 - 299200 - 206성공
300 - 399300 - 305리다이렉션
400 - 499400 - 415클라이언트 에러
500 - 599500 - 505서버 에러

위에서 정의된 범위는 HTTP 명세에 의해 정의된 상태 코드를 의미한다. 정의된 범위를 벗어난 상태 코드는, 사용자 정의된 상태 코드이다. HTTP 명세에 의해 정의된 상태 코드를 하나 하나 살펴보자.

100 - 199: 정보성 상태 코드

HTTP 1.1에서 도입된 코드이다.

100: Continue

100 Continue 상태는 서버가 클라이언트의 요청 일부를 처리했고 나머지를 보내라는 의미이다. 이 상태 코드는 클라이언트가 본격적으로 요청 메시지를 보내기 전에, 해당 메시지를 서버가 처리할 수 있는지 확인하기 위한 용도로 사용된다.

이 상태 코드가 사용되는 시나리오는 아래와 같다.

  1. 클라이언트는 100-continue를 값으로 갖는 Expect 요청 헤더를 보낸다. 이때, 클라이언트가 엔터티 본문을 보낼 생각이 없다면 이러한 요청 헤더를 보내면 안된다. 서버는 클라이언트로부터 엔터티 본문이 추가적으로 올 것이라 예상하기 때문이다.
  2. 서버는 클라이언트가 보낼 엔터티 본문을 처리할 수 있다면 상태 코드 100이 담긴 응답 HTTP 메시지를 보낸다. 만약, 서버가 해당 엔터티 본문을 처리할 능력이 없다면 상태 코드 417이 담긴 응답 HTTP 메시지를 보낸다. 417 코드는 클라이언트의 Expectation을 충족시킬 수 없음을 나타낸다.

101: Switching Protocols

클라이언트는 Upgrade 헤더를 통해, 클라이언트와 서버가 사용할 프로토콜을 바꿀 것을 요청할 수 있다. 서버는 이러한 요청을 받았을 때, 성공적으로 프로토콜을 바꿨다는 것을 나타내기 위해 101 상태 코드가 담긴 응답 메시지를 보낼 수 있다. 프로토콜을 바꾸는데 실패했을 경우 사용해야하는 상태 코드는 없다. 일반적으로 400 상태 코드를 사용한다는 Bing AI의 응답을 받을 수 있었다.

200 - 299: 성공 상태 코드

상태 코드사유 구절의미
200OK엔터티 본문은 요청된 리소스를 포함하고 있다.
201CreatedPUT과 POST와 같이 서버에 자원을 생성하라는 요청에 대한 성공적인 응답. 서버는 리소스에 대한 Location 헤더와 리소스를 나타내는 여러 URL을 엔터티 본문에 포함하여 응답 메시지를 보낸다.
202Accepted요청은 받아들여졌지만 서버가 아직 동작을 수행하지 않았다는 의미. 서버가 동작을 수행하여 요청을 완료하리라는 보장은 없다. 서버는 엔터티 본문에 요청에 대한 상태와 요청의 처리가 언제 완료될 것인지에 대한 추정을 포함하여 응답 메시지를 보낸다.
203Non-Authoritative Information엔터티 본문의 속성을 지정하는 엔터티 헤더에 들어있는 정보가, 원래 서버가 아닌 리소스의 사본에서 왔다. 프록시와 같은 중개자가 리소스의 사본을 갖고 있었지만 리소스에 대한 메타 정보(헤더)를 검증하지 않은 경우 프록시는 이런 상태 코드를 포함하여 응답 메시지를 보낼 수 있다.
204No Content서버가 보낸 응답 메시지에 엔터티 본문이 비어있다. 일반적으로 클라이언트가 보낸 요청을 서버가 성공적으로 처리했지만 웹 브라우저가 새로운 페이지로 이동할 필요가 없다는 의미를 갖는다.
205Reset Content브라우저에게 현재 페이지에 있는 HTML 폼에 채워진 모든 값을 비울 것을 서버가 요청할 때 사용한다.
206Partial Content범위 요청이 성공했다.

마무리

이번 글에서는 HTTP 상태 코드 중에서 100-299 범위에 정의된 상태 코드를 살펴봤다. 다음 글에서는 300대 상태 코드를 살펴보자.

0개의 댓글