Разработчик написал production-grade HTCPCP-сервер на Go — потому что никто больше не стал
RFC 2324 — протокол управления кофеваркой — существует с 1998 года. За 28 лет никто не написал production-grade реализацию. Нико Туразашвили решил это исправить: 4500 строк на Go, ноль зависимостей, real-time дашборд и защита от Denial of Coffee Service.
RFC 2324 — протокол управления кофеваркой — существует с 1998 года. За 28 лет никто не написал production-grade реализацию. Нико Туразашвили решил это исправить: 4500 строк на Go, ноль зависимостей, real-time дашборд и защита от Denial of Coffee Service.
Ключевые выводы
- Полностью RFC 2324-совместимый HTCPCP/1.0-сервер с поддержкой методов BREW, WHEN, PROPFIND
- RFC 7168 TEA extension — поддержка чая, ответ 300 Multiple Options с заголовком Alternates
- Обнаружение Denial of Coffee Service (DoCS) — больше 10 запросов BREW за 30 секунд
- Каждый 5-й кофейник — тайный чайник, который возвращает 418 I'm a Teapot
- 4500 строк Go, ноль внешних зависимостей, один бинарник
По материалам статьи Нико Туразашвили (axrisi) на dev.to.
Что такое HTCPCP и зачем его реализовывать
RFC 2324 (Hyper Text Coffee Pot Control Protocol) — апрельская шутка IETF от 1998 года. Документ определяет HTTP-методы BREW и WHEN, статус-код 418 I'm a Teapot, заголовок Accept-Additions для сливок и виски, и даже предупреждает об атаках типа «denial of coffee service».
BrewOps — первая полностью совместимая реализация этого протокола. Сервер написан на чистом Go (стандартная библиотека, ноль зависимостей), компилируется в один бинарник и включает CLI brew-ctl, real-time веб-дашборд и Docker-поддержку. Dockerfile называется Brewfile, сервис в Docker Compose — barista.
Что умеет сервер
Сервер обрабатывает четыре HTTP-метода по спецификации:
BREWиPOST— запускают заваривание. POST deprecated по RFC, но поддерживаетсяGET— возвращает статус кофейника с ротирующимися метками температуры: от «Tepid (Why Bother)» до «Thermonuclear (Handle At Own Risk)»WHEN— останавливает подачу молока. Прямая цитата из RFC: «it is necessary for the holder of the recipient of milk to say when»PROPFIND— метаданные: автор протокола (Larry Masinter), список из 16 добавок включая Aquavit
Каждый кофейник проходит через конечный автомат: idle → grinding → brewing → pouring → ready → cooling → idle. Полный цикл — ~60 секунд. Горутина-«уборщик» каждые 15 секунд чистит неиспользуемые динамические кофейники.
Лотерея чайников и 418 I'm a Teapot
BREW /pot динамически создаёт новый кофейник. Каждый пятый — тайный чайник с именами вроде «The 418 Generator» или «Agent Teapot». При попытке заварить в нём кофе сервер возвращает 418 I'm a Teapot с ASCII-артом и детской считалкой:
Denial of Coffee Service
Секция 7 RFC 2324 предупреждает: «Unmoderated access to unprotected coffee pots from Internet users might lead to several kinds of denial of coffee service attacks». Автор реализовал это буквально.
Больше 10 запросов BREW за 30 секунд — и сервер классифицирует это как DoCS-атаку. В ответе появляется баннер с предупреждением, счётчик инцидентов на дашборде растёт, а в логе — сообщения вроде «The On-Brew Engineer has left the building. And the country». Кофе при этом всё равно заваривается — это же кофеварка, а не файрвол.
Как говорит сам RFC: «Modern coffee pots do not use fire. Thus, no firewalls are necessary».
Дашборд и метрики
Веб-дашборд стилизован под форум 90-х, получивший повышение до SRE-инструмента. В real-time отслеживаются: количество заварок, выданные 418-е, кофеин в миллиграммах (мерится как облачный compute), обнаруженные DoCS-атаки, brew uptime (99.97%) и «спиллы за квартал: 3».
Ответы двухрежимные: curl получает plain text с ASCII-артом, а дашборд через заголовок Accept: application/json — структурированный JSON. Content negotiation по RFC.
Как попробовать
Живой сервер и дашборд доступны прямо сейчас. Несколько команд для терминала:
Исходный код — на GitHub. Лицензия MIT с дополнением: «COFFEE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF TEMPERATURE».
FAQ
Что такое RFC 2324?
Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) — шуточный стандарт IETF от 1 апреля 1998 года, написанный Ларри Мазинтером. Определяет HTTP-методы BREW и WHEN, статус-код 418 I'm a Teapot и заголовок Accept-Additions для добавок в кофе. Позже дополнен RFC 7168, который добавил поддержку чая.
Зачем реализовывать шуточный протокол?
Автор рассматривает это как инженерное упражнение: работа с нестандартными HTTP-методами, конечные автоматы, SSE-стриминг, rate limiting и content negotiation — всё на чистом Go без зависимостей. Плюс это весело.
Можно ли использовать BrewOps в реальном проекте?
Технически — да, сервер production-grade: один бинарник, Docker-поддержка, graceful shutdown, метрики. Практически — это кофеварка, управляемая по HTTP. Применяйте по усмотрению.
Полная статья с демо и подробностями реализации — на dev.to.