Hyper Text Coffee Pot Control Protocol

Last updated
Hyper Text Coffee Pot Control Protocol
Htcpcp teapot.jpg
Back-end infrastructure of error418.net, which implements HTCPCP using a teapot and Raspberry Pi
International standard Internet Engineering Task Force
Developed by Larry Masinter
IntroducedApril 1, 1998 (1998-04-01)
Website rfc2324
Working teapot implementing HTCPCP-TEA HTCPCP Pot.jpg
Working teapot implementing HTCPCP-TEA

The Hyper Text Coffee Pot Control Protocol (HTCPCP) is a facetious communication protocol for controlling, monitoring, and diagnosing coffee pots. It is specified in RFC   2324, published on 1 April 1998 as an April Fools' Day RFC, [2] as part of an April Fools prank. [3] An extension, HTCPCP-TEA, was published as RFC 7168 on 1 April 2014 [4] to support brewing teas, which is also an April Fools' Day RFC.

Contents

Protocol

RFC 2324 was written by Larry Masinter, who describes it as a satire, saying "This has a serious purpose it identifies many of the ways in which HTTP has been extended inappropriately." [5] The wording of the protocol made it clear that it was not entirely serious; for example, it notes that "there is a strong, dark, rich requirement for a protocol designed espressoly [ sic ] for the brewing of coffee".

Despite the joking nature of its origins, or perhaps because of it, the protocol has remained as a minor presence online. The editor Emacs includes a fully functional client side implementation of it, [6] and a number of bug reports exist complaining about Mozilla's lack of support for the protocol. [7] Ten years after the publication of HTCPCP, the Web-Controlled Coffee Consortium (WC3) published a first draft of "HTCPCP Vocabulary in RDF" [8] in parody of the World Wide Web Consortium's (W3C) "HTTP Vocabulary in RDF". [9]

On April 1, 2014, RFC 7168 extended HTCPCP to fully handle teapots. [4]

Commands and replies

HTCPCP is an extension of HTTP. HTCPCP requests are identified with the Uniform Resource Identifier (URI) scheme coffee (or the corresponding word in any other of the 29 listed languages) and contain several additions to the HTTP methods:

MethodDefinition
BREW or POSTCauses the HTCPCP server to brew coffee. Using POST for this purpose is deprecated. A new HTTP request header field "Accept-Additions" is proposed, supporting optional additions including Cream, Whole-milk, Vanilla, Raspberry, Whisky, Aquavit, etc.
GET"Retrieves" coffee from the HTCPCP server.
PROPFINDReturns metadata about the coffee.
WHEN Says "when", causing the HTCPCP server to stop pouring milk into the coffee (if applicable).

It also defines three error responses:

Status codeDefinition
406 Not AcceptableThe HTCPCP server is unable to provide the requested addition for some reason; the response should indicate a list of available additions. The RFC observes that "In practice, most automated coffee pots cannot currently provide additions."
418 I'm a teapotThe HTCPCP server is a teapot; the resulting entity body "may be short and stout" (a reference to the song "I'm a Little Teapot"). Demonstrations of this behaviour exist. [1] [10]
503 Service UnavailableAccording to Mozilla Developer Documentation "A combined coffee/tea pot that is temporarily out of coffee should instead return 503", when requested to brew [11]

Save 418 movement

On 5 August 2017, Mark Nottingham, chairman of the IETF HTTPBIS Working Group, called for the removal of status code 418 "I'm a teapot" from the Node.js platform, a code implemented in reference to the original 418 "I'm a teapot" established in Hyper Text Coffee Pot Control Protocol. [12] On 6 August 2017, Nottingham requested that references to 418 "I'm a teapot" be removed from the programming language Go [13] and subsequently from Python's Requests [14] and ASP.NET's HttpAbstractions library [15] as well.

In response, 15-year-old developer Shane Brunswick created a website, save418.com, [16] and established the "Save 418 Movement", asserting that references to 418 "I'm a teapot" in different projects serve as "a reminder that the underlying processes of computers are still made by humans". Brunswick's site went viral in the hours following its publishing, garnering thousands of upvotes on the social platform Reddit, [17] and causing the mass adoption of the "#save418" Twitter hashtag he introduced on his site. Heeding the public outcry, Node.js, Go, Python's Requests, and ASP.NET's HttpAbstractions library decided against removing 418 "I'm a teapot" from their respective projects. The unanimous support from the aforementioned projects and the general public prompted Nottingham to begin the process of having 418 marked as a reserved HTTP status code, [18] ensuring that 418 will not be replaced by an official status code for the foreseeable future.

On 5 October 2020, Python 3.9 released with an updated HTTP library including 418 IM_A_TEAPOT status code. [19] In the corresponding pull request, the Save 418 movement was directly cited in support of adoption. [20]

Usage

The status code 418 is sometimes returned by servers when blocking a request, instead of the more appropriate 403 Forbidden. [21]

Around the time of the 2021–2022 Russo-Ukrainian crisis, the Russian military website mil.ru returned the HTTP 418 status code when accessed from outside of Russia as a DDoS attack protection measure. [22] [23] The change was first noticed in December of 2021. [24]

See also

Related Research Articles

<span class="mw-page-title-main">HTTP</span> Application protocol for distributed, collaborative, hypermedia information systems

The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, where hypertext documents include hyperlinks to other resources that the user can easily access, for example by a mouse click or by tapping the screen in a web browser.

A Uniform Resource Identifier (URI) is a unique sequence of characters that identifies a logical or physical resource used by web technologies. URIs may be used to identify anything, including real-world objects, such as people and places, concepts, or information resources such as web pages and books. Some URIs provide a means of locating and retrieving information resources on a network ; these are Uniform Resource Locators (URLs). A URL provides the location of the resource. A URI identifies the resource by name at the specified location or URL. Other URIs provide only a unique name, without a means of locating or retrieving the resource or information about it; these are Uniform Resource Names (URNs). The web technologies that use URIs are not limited to web browsers. URIs are used to identify anything described using the Resource Description Framework (RDF), for example, concepts that are part of an ontology defined using the Web Ontology Language (OWL), and people who are described using the Friend of a Friend vocabulary would each have an individual URI.

<span class="mw-page-title-main">Network Time Protocol</span> Standard protocol for synchronizing time across devices

The Network Time Protocol (NTP) is a networking protocol for clock synchronization between computer systems over packet-switched, variable-latency data networks. In operation since before 1985, NTP is one of the oldest Internet protocols in current use. NTP was designed by David L. Mills of the University of Delaware.

A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that uses the urn scheme. URNs are globally unique persistent identifiers assigned within defined namespaces so they will be available for a long period of time, even after the resource which they identify ceases to exist or becomes unavailable. URNs cannot be used to directly locate an item and need not be resolvable, as they are simply templates that another parser may use to find an item.

400 is the natural number following 399 and preceding 401.

Web standards are the formal, non-proprietary standards and other technical specifications that define and describe aspects of the World Wide Web. In recent years, the term has been more frequently associated with the trend of endorsing a set of standardized best practices for building web sites, and a philosophy of web design and development that includes those methods.

<span class="mw-page-title-main">HTTP 403</span> HTTP status code indicating that access is forbidden to a resource

HTTP 403 is an HTTP status code meaning access to the requested resource is forbidden. The server understood the request, but will not fulfill it, if it was correct.

<span class="mw-page-title-main">HTTP 302</span> HTTP Status Code

The HTTP response status code 302 Found is a common way of performing URL redirection. The HTTP/1.0 specification initially defined this code, and gave it the description phrase "Moved Temporarily" rather than "Found".

A Request for Comments (RFC), in the context of Internet governance, is a type of publication from the Internet Engineering Task Force (IETF) and the Internet Society (ISOC), usually describing methods, behaviors, research, or innovations applicable to the working of the Internet and Internet-connected systems.

<span class="mw-page-title-main">WebSocket</span> Computer network protocol

WebSocket is a computer communications protocol, providing simultaneous two-way communication channels over a single Transmission Control Protocol (TCP) connection. The WebSocket protocol was standardized by the IETF as RFC 6455 in 2011. The current specification allowing web applications to use this protocol is known as WebSockets. It is a living standard maintained by the WHATWG and a successor to The WebSocket API from the W3C.

HTTP/2 is a major revision of the HTTP network protocol used by the World Wide Web. It was derived from the earlier experimental SPDY protocol, originally developed by Google. HTTP/2 was developed by the HTTP Working Group of the Internet Engineering Task Force (IETF). HTTP/2 is the first new version of HTTP since HTTP/1.1, which was standardized in RFC 2068 in 1997. The Working Group presented HTTP/2 to the Internet Engineering Steering Group (IESG) for consideration as a Proposed Standard in December 2014, and IESG approved it to publish as Proposed Standard on February 17, 2015. The HTTP/2 specification was published as RFC 7540 on May 14, 2015.

QUIC is a general-purpose transport layer network protocol initially designed by Jim Roskind at Google, implemented, and deployed in 2012, announced publicly in 2013 as experimentation broadened, and described at an IETF meeting. QUIC is used by more than half of all connections from the Chrome web browser to Google's servers. Microsoft Edge, Firefox and Safari support it.

<span class="mw-page-title-main">HTTP 451</span> HTTP status code

In computer networking, HTTP 451 Unavailable For Legal Reasons is a proposed standard error status code of the HTTP protocol to be displayed when the user requests a resource which cannot be served for legal reasons, such as a web page censored by a government. The number 451 is a reference to Ray Bradbury's 1953 dystopian novel Fahrenheit 451, in which books are outlawed. 451 provides more information than HTTP 403, which is often used for the same purpose. This status code is currently a proposed standard in RFC 7725 but is not yet formally a part of HTTP, as of RFC 9110.

A Uniform Resource Locator (URL), colloquially known as an address on the Web, is a reference to a resource that specifies its location on a computer network and a mechanism for retrieving it. A URL is a specific type of Uniform Resource Identifier (URI), although many people use the two terms interchangeably. URLs occur most commonly to reference web pages (HTTP/HTTPS) but are also used for file transfer (FTP), email (mailto), database access (JDBC), and many other applications.

<span class="mw-page-title-main">Well-known URI</span>

A well-known URI is a Uniform Resource Identifier for URL path prefixes that start with /.well-known/. They are implemented in webservers so that requests to the servers for well-known services or information are available at URLs consistent well-known locations across servers.

HTTP/3 is the third major version of the Hypertext Transfer Protocol used to exchange information on the World Wide Web, complementing the widely-deployed HTTP/1.1 and HTTP/2. Unlike previous versions which relied on the well-established TCP, HTTP/3 uses QUIC, a multiplexed transport protocol built on UDP. On 6 June 2022, IETF published HTTP/3 as a Proposed Standard in RFC 9114.

Larry Melvin Masinter is an early internet pioneer and ACM Fellow. After attending Stanford University, he became a Principal Scientist of Xerox Artificial Intelligence Systems and author or coauthor of 26 of the Internet Engineering Task Force's Requests for Comments.

References

  1. 1 2 Reddington, Joseph, Illustrated implementation of Error 418, archived from the original on 2015-09-06, retrieved 2014-10-18
  2. Masinter, Larry M. (April 1998), "Request for Comments 2324", Network Working Group, IETF, archived from the original on 2012-04-04, retrieved 2012-03-20
  3. DeNardis, Laura (30 September 2009). Protocol Politics: The Globalization of Internet Governance. MIT Press. pp. 27ff. ISBN   978-0-262-04257-4 . Retrieved 8 May 2012.
  4. 1 2 Nazar, Imran (April 2014), "Request for Comments 7168", The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances (HTCPCP-TEA), IETF, archived from the original on 2014-05-29, retrieved 2014-04-22
  5. Masinter, Larry. "IETF RFCs". Archived from the original on 2013-03-27.
  6. "Emacs extension: coffee.el", Emarsden, Chez, archived from the original on 2009-02-01, retrieved 2009-02-10.
  7. "Bug 46647 – (coffeehandler) HTCPCP not supported (RFC2324)", Bugzilla, Mozilla, archived from the original on 2011-05-14, retrieved 2005-12-21
  8. HTCPCP Vocabulary in RDF – WC3 RFC Draft, Chief Arabica (Web-Controlled Coffee Consortium), 1 April 2008, archived from the original on 15 May 2021, retrieved 17 March 2023 via github
  9. Koch, Johannes (ed.), HTTP Vocabulary in RDF, et al, W3, archived from the original on 15 October 2009, retrieved 17 August 2009
  10. "A Goblin Teasmade teamaker with an implementation of Error 418". Archived from the original on 2014-12-06. Retrieved 2014-07-26.
  11. "418 I'm a teapot - HTTP | MDN". developer.mozilla.org. 2023-04-10. Retrieved 2023-09-21.
  12. Nottingham, Mark. "418 I'm A Teapot #14644". Archived from the original on 2017-08-10. Retrieved 2017-08-12 via github.
  13. Nottingham, Mark. "net/http: remove support for status code 418 I'm a Teapot". Archived from the original on 2017-08-10. Retrieved 2017-08-12 via github.
  14. Nottingham, Mark. "418 418 I'm a Teapot #4238". Archived from the original on 2021-05-15. Retrieved 2017-08-12 via github.
  15. Nottingham, Mark. "418 I'm a Teapot #915". Archived from the original on 2019-05-10. Retrieved 2017-08-12 via github.
  16. Brunswick, Shane (2017-09-10). "We are the teapots". The Save 418 Movement. Archived from the original on 2021-05-15. Retrieved 2021-05-15.
  17. "HTTP Error Code 418 I'm a Teapot is about to be removed from Node. We've gotta do something. [x-post /r/webdev]". Archived from the original on 2017-08-11. Retrieved 2017-08-12 via reddit.
  18. Nottingham, Mark. "Reserving 418". Archived from the original on 2017-08-13. Retrieved 2017-08-12 via github.
  19. "What's New In Python 3.9 — Python 3.9.0 documentation". Python Documentation. 2020-10-05. Archived from the original on 2020-10-07. Retrieved 2020-10-08.
  20. "Issue 39507: http library missing HTTP status code 418 "I'm a teapot" – Python tracker". bugs.python.org. Archived from the original on 2020-10-14. Retrieved 2020-10-08.
  21. "Enable extra web security on a website". DreamHost . Retrieved 2022-12-18.
  22. "Russia appears to deploy digital defenses after DDoS attacks". The Record by Recorded Future . 2022-02-25. Retrieved 2022-02-26.
  23. "I Went to a Russian Website and All I Got Was This Lousy Teapot". PCMag . Retrieved 2022-02-28.
  24. "Russian MoD website blocked for non-Russian IPs | Hacker News".