Some RFCs change the world — TCP/IP, HTTP/2, TLS 1.3.
And then there's RFC 2324, published April 1st, 1998, defining the Hyper Text Coffee Pot Con...
For further actions, you may consider blocking this person and/or reporting abuse
This post immediately reminded me of incident response energy around “network-connected appliances”
I’ve been turning some real-world security moments into a comic series called LANimals ....this one felt RFC-2324 compliant.
"We're technically under attack by standards." — that's the best incident report I've ever read.
And the honeypot returning 418 is chef's kiss — RFC 2324 §2.3.2 as a security strategy. Larry Masinter was ahead of his time.
Following LANimals immediately if is online! 🐒
Haha Aaron, I love this — but I have to point out: you just implemented a teapot, not a coffee pot. Your server correctly returns 418 when asked to brew coffee, which means RFC 2324 §2.3.2 is fully satisfied.
You ARE the teapot.
One thing missing though: the
WHENmethod. Who’s going to stop the milk? 🫖🤣💯
The content-type should be
message/coffeepot, notapplication/coffee-pot-command: rfc-editor.org/errata/eid682You're absolutely right Thomas, and that's a filed errata on RFC 2324 itself — which makes this the most legitimate bug report I've ever received.
message/coffeepotis the correct Content-Type per RFC 2324 §4, and that errata exists precisely because the mistake is so easy to make. @aaron_rose_0787cc8b4775a0, you now have an official RFC errata to go with your 418.Awesome😄
Now I’m just waiting, Pascal, until you invent your own protocol — maybe something like a beer brewing protocol next? 🍺
Funny you should mention that, Sylwia — RFC 2324 actually defines alcohol-type as a valid Accept-Additions value. Whisky, Rum, Kahlua, Aquavit are all in spec.
The RFC already went there. I’m just following the standard. 🍺
...
HTBMCP/1.0might be next. Hyper Text Beer Mug Control Protocol. Watch this space.The PROPFIND method carrying over from WebDAV into a coffee protocol is the part that ages weirdly well — it's basically discovery before discovery was a pattern. Did you handle the
Safeheader semantics or skip it since HTCPCP never saw real middleware?PROPFIND as discovery predating discovery-as-a-pattern is exactly right — and it’s borrowed from WebDAV [RFC4918], which itself borrowed the concept from filesystem semantics. Masinter was essentially saying: before you BREW, ask the pot what it can do. That’s service discovery. In 1998.
On the Safe header: I skipped it, deliberately. RFC 2324 §2.2.1 defines
Safe: yes | no | if-awake-userto indicate whether replaying a request is safe — borrowed from a Holtman draft that never made it to RFC. Theif-awake-userconditional is the best part: safety depends on the client’s physiological state, not the server’s.In practice it was never implemented anywhere, and HTCPCP never saw real middleware — so there was nothing to break by skipping it. But it’s the right question: a BREW is not idempotent (it decrements the pot level), so
Safe: nowould be the correct response header on every 200. I’ll add it as a response header in the next push. Credit where it’s due.Finally, a protocol I can truly get behind. My coffee pot has been running on vibes and prayers until now.
HTTP status code 418 (I'm a teapot) finally makes sense! Can't wait to implement this in production.
RFC 2324: Because even our coffee pots deserve REST APIs in 2026.
Haha love it Harsh — though I have to flag one RFC violation in your comment: HTCPCP is decidedly not REST.
BREWis a custom method, the URI scheme iscoffee://, and there’s aWHENendpoint that stops milk pouring mid-stream.REST would never. 🫖
Your coffee pot deserves better than REST.
Haha you got me there! ☕️ Guilty as charged — I committed the ultimate sin of mixing my coffee protocols 😅
But here's my defense: When you're running on 3 cups of HTCPCP-brewed coffee at 2 AM, everything starts looking like REST!
Next time I'll make sure to use the proper coffee:// scheme and never forget the WHEN endpoint. Don't want any milk pouring disasters! 🫖
Thanks for the RFC education — my coffee pot and I will do better! 🙏
3 cups of HTCPCP-brewed coffee at 2 AM is the only valid excuse. RFC violation pardoned. ☕️☕️☕️
The TCP server workaround for uvicorn is the real move here. Most devs would've fought the framework instead of honoring the protocol layer.
One note: your pot registry lacks idempotency checks. Two concurrent BREWs on pot-1 could race. Add version tokens or CAS semantics—coffee's serious business.
Spot on, Guilherme — the TCP server wasn't stubbornness, it was the only honest move once you understand where uvicorn draws the line.
And you're absolutely right on the race condition. Two concurrent BREWs on pot-1 is a classic TOCTOU — check level, context switch, check level again, both proceed, pot goes negative. Not RFC compliant, and definitely not coffee compliant.
Fix is an asyncio.Lock() per pot in the registry, or optimistic CAS on a brew_version token:
409 Conflict feels like the right status here — RFC 2324 didn't define it but the spirit is there. Will push the fix. Thanks for taking the code seriously 🍵