HTTP 응답에는 상태 코드라는 개념이 있습니다. 상태 코드는 웹 서버에서 응답을 내려줄 때, 요청에 대한 처리 결과를 간결하게 알려주기 위해 사용되죠. 대표적인 상태 코드로 200 OK
, 404 Not Found
, 500 Internal Server Error
등이 있습니다.
그런데, HTTP 상태 코드의 목록을 자세히 들여다보면 이런 생소한 코드도 존재한답니다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
418 I'm a teapot
서버는 커피를 찻 주전자에 끓이는 것을 거절합니다.
생뚱맞게 찻 주전자가 왜 나오죠..? 누가 커피를 끓여달라고 한 거죠? 모질라 도큐먼트에 있는 내용치고는 파격적입니다. 귀엽기도 하고요. 어쩌다 이런 스펙이 생겼을지 궁금하지 않으신가요?
국제 인터넷 표준화 기구(Internet Engineering Task Force, IETF)는 말 그대로 전 세계에서 통용되는 인터넷에 대한 표준, 명세를 정의하는 단체입니다.
이 IETF에는 매년 만우절에 장난스러운 RFC를 출판하고 있습니다. RFC란 RFC 메모라고도 하는데요, 새로운 인터넷 기술이나 연구의 결과물을 담고 있는 일종의 웹 출판물이라고 보시면 됩니다. 국제 웹 표준과 밀접한 관련이 있는 공신력 있는 문서입니다. 장난으로 기술문서를 배포하다니, 일종의 '재능 낭비'라고 할까요.
418 I'm a teapot
은, 1998년 만우절에 IETF에서 출판한 RFC2324의 내용의 일부입니다. 이제 이 RFC의 내용을 살펴보겠습니다.
#커피 주전자용 프로토콜, HTCPCP
RFC2324의 주제는 바로 커피 주전자용 프로토콜, HTCPCP 입니다.
직역하자면 하이퍼텍스트 커피포트 제어 프로토콜이라고 할 수 있겠네요. 커피를 제공받고자 하는 클라이언트와 커피 서버(=커피포트 서버, 커피포트) 사이의 통신에 사용됩니다. HTTP 프로토콜 기반으로 만들어졌습니다. 즉, HTTP 위에 추가로 새로운 메소드, 헤더, 상태 코드 등을 정의 한 형태입니다. URI 스킴으로 coffee:
를 사용합니다.
#HTCPCP 메소드
메소드 | 설명 |
---|---|
BREW | 커피포트를 조종하기 위한 코멘드를 서버에게 전달하는 데에 쓰입니다. 즉 커피를 끓일 수 있습니다. 커피포트는 불(fire) 없이 전기로 물을 데우기 때문에, 방화벽(firewall)에 대한 옵션은 포함할 필요가 없습니다. POST 메소드로도 동일한 동작을 지원하나, depretacted 되었습니다. |
GET | URI에 해당하는 자원을 리턴합니다. 즉 서버가 커피를 서빙합니다. |
PROPFIND | 커피의 메타데이터를 조회합니다. |
WHEN | 커피를 끓인 후 우유를 넣을 때, 멈춰야 하는 타이밍을 서버에게 알립니다. (Enough? Say WHEN.) |
#HTCPCP 헤더
HTTP 요청에는 클라이언트가 처리할 수 있는 응답 타입을 표시하기 위해 Accept
헤더가 사용되는데요. 예를 들어 HTTP 요청을 Accept: text/html
헤더와 함께 보낸다면 클라이언트는 그 응답으로 HTML 도큐먼트를 기대할 겁니다.
HTCPCP로는 커피를 주문할 때는, (즉 BREW
요청을 보낼 때는) 여러 가지 부가적인 요구 사항을 같이 전달하는데요. Accept
헤더 하나만으로는 커피에 필요한 다양한 요구 사항을 다 담을 수가 없어서 Accept-Additions
라는 헤더 필드를 사용합니다.
커피에 추가로 원하는 우유 타입 (Cream
, Half-and-half
, Whole-milke
), 시럽 타입(Vanilla
, Chocolate
), 알코올 타입(Whisky
, Rum
, Kahlua
) 등을 지정할 수 있습니다. 예를 들어 Accept-Additions: Whole-milk;10,Vanilla;2
이라고 요청하면 바닐라 라떼가 만들어질 것 같네요!
#HTCPCP 상태 코드
상태 코드 | 설명 |
---|---|
406 Not Acceptable | 요청을 수행할 수 없을 때의 에러 코드입니다. 대표적인 예시로는 요청 헤더 Accept-Additions에 명시된 요구사항을 만족할 수 없는 경우입니다. 예를 들어 바닐라 시럽이 다 떨어졌을 수 있겠네요. |
418 I'm a teapot | 찻주전자가 커피를 끓여달라는 요청을 받았을 때의 에러 코드입니다. 이 경우 응답의 body는 짧고 통통(short and stout)할 수 있습니다. |
#같이 보면 좋은 내용
- 외국 블로그에 실물로 418 에러 코드의 개념을 입증하는 찻주전자를 만든 사례도 한번 읽어보시면 재밌습니다. http://joereddington.com/418-error-code-teapot/
- 구글에
/teapot
URL로 요청하면, 실제로 418 응답코드를 내려줍니다. 깨알 같은 이스터에그죠! https://www.google.com/teapot - 418 응답 body가 short and stout 한 이유, I'm A Little Teapot Song 노래입니다. https://www.youtube.com/watch?v=b14OeT1gNFo