418 I'm a teapot
Применение
Сообщение об ошибке 418 I’m a teapot было придумано как одна из первоапрельских шуток IETF. В RFC говорится, что любой чайник, которого попросили сварить кофе, отвечает именно этим сообщением. В частности, получаемое тело сообщения описывается как «низенькое и пузатое».
Хотя этот код состояния не применяется в продакшене, многие HTTP-библиотеки его поддерживают. Попытка убрать этот код состояния, чтобы освободить номер для официального использования, натолкнулась на сопротивление и породила инициативу Save 418. Сообщение и код состояния сохранились.
Резервирование кода состояния
Спецификация HTTP резервирует код состояния 418 как “(Unused)”, чтобы избежать конфликтов с широко распространёнными реализациями HTCPCP.
Влияние на SEO
Поисковые системы вроде Google не станут индексировать URL с кодом состояния ответа 418 I’m a teapot. Ранее проиндексированные URL будут удалены из результатов поиска.
Пример
Клиент просит сварить кофе, но чайник возражает.
Запрос
BREW coffee HTTP/1.1
Host: example.com
Content-Type: message/coffeepot
Content-Length: 5
start
Ответ
HTTP/1.1 418 I'm a teapot
Content-Type: text/html
Content-Length: 146
<html>
<head>
<title>Beverage not supported</title>
</head>
<body>
<p>This is a teapot. Coffee is not supported.</p>
</body>
</html>
Как получить ответ 418
Ответ 418 возвращают только серверы, настроенные на поддержку шуточного протокола HTCPCP, либо приложения, явно возвращающие этот код. Google возвращает 418 по адресу google.com/teapot в качестве пасхалки. Многие веб-фреймворки позволяют вернуть 418, напрямую задав код состояния ответа. Ни один стандартный HTTP-сервер не возвращает 418 без умышленной настройки.
История 418
Код состояния появился в 1998 году как часть первоапрельской спецификации Hyper Text Coffee Pot Control Protocol (HTCPCP). Сопутствующая спецификация, расширяющая HTCPCP на чай, вышла в 2014 году. Когда в 2017 году IETF рассматривала возможность вернуть этот код для официального использования, сообщество разработчиков возразило и запустило движение Save 418. В итоге IETF зарезервировала код как “(Unused)” в основной спецификации HTTP.
Примеры кода
.NET
StatusCodes.Status418ImATeapot
Rust
http::StatusCode::IM_A_TEAPOT
Go
http.StatusTeapot
Symfony
Response::HTTP_I_AM_A_TEAPOT
Python3.9+
http.HTTPStatus.IM_A_TEAPOT
Angular
@angular/common/http/HttpStatusCode.ImATeapot