418 “Я чайник” - це справді код відповіді HTTP?


121

418 "Я чайник" - це справді код відповіді HTTP?

В Інтернеті є різні посилання на це, зокрема в списках кодів відповідей, але я не можу зрозуміти, чи це дивна жарт.



1
Обов’язково: google.com/teapot
ΛRYΛN

Відповіді:


122

Я використовую цей код. У мене є запити зворотного проксінгу nginx до двох окремих серверів HTTP. Один обробляє запити для неаутентифікованих користувачів, а другий - для запитів для автентифікованих користувачів. Проблема в цьому конкретному випадку полягає в тому, що перший сервер є тим, який визначає, чи аутентифіковано користувача. Будь ласка, не питайте чому.

Отже, якщо перший сервер визначає, що користувач автентифікований, він відповідає 418 I'm a teapot. Потім NGINX перенаправляє трафік внутрішньо на другий сервер. Що стосується браузера, то це був один запит.

Це відповідає духу коду HTCPCP 418 , тому що якщо ви намагаєтесь ЗРОБИТИ за допомогою чайника, відповідна відповідь: "Я не той, хто може обробляти цей запит, але можуть бути й інші". .. Іншими словами, "я чайник. Знайди кавоварку". (другий сервер - кавоварка).

Зрештою, хоча 418 прямо не визначено в RFC 7231 , він все ще покритий парасолькою 4xx (Client Error).

6. Коди стану відповіді

  • 4xx (помилка клієнта): запит містить неправильний синтаксис або не може бути виконаний

6.5. Помилка клієнта 4xx

  • Клас коду стану 4xx (помилка клієнта) вказує на помилку клієнта. За винятком випадків, коли відповідає на запит HEAD, сервер ПОВИНЕН надіслати подання, що містить пояснення ситуації з помилкою та тимчасового чи постійного стану. Ці коди стану застосовні до будь-якого методу запиту. Агенти користувача ПОВИННІ відображати будь-яке включене представлення для користувача.

2
У мене є сторонній постачальник (насправді поганий), який відповів би 418, якщо ви пропустили заголовок Accept. Я завжди думав, що це тому, що їм було просто погано, але це насправді пояснює те, що відбувалося. Досі не прощає їм витоку цього коду стану зі своїх серверів
Хоффманн

7
@Hoffmann Можливо, їм було б відповісти 400 Помилковим запитом або 415 непідтримуваним типом носія, будь-який 4xx-код представляє помилку клієнта, тому його можна трактувати таким чином.
wizulus

1
Цей код стану додано до стандартного бібліотечного модуля httpв Python 3.9.
BramAppel

61

Код відповіді HTTP 418 спочатку був визначений у протоколах RFC 2324 ("Протокол управління кавовим гіпертекстом (HTCPCP / 1.0)") і RFC 7168 ("Протокол управління кавовим гіпертекстом для приладів, що виводять чай (HTCPCP-TEA)").

За Вікіпедією: Список кодів статусу HTTP: # 418

Цей код був визначений у 1998 році як одна з традиційних першокурневих жартів IETF у RFC 2324 , Hyper Text Coffee Pot Control Protocol , і не очікується, що він буде реалізований справжніми серверами HTTP . RFC вказує, що цей код повинні повертати чайники, яким пропонується варити каву. Цей статус HTTP використовується як писанка на деяких веб-сайтах, зокрема Google.com .


10
Варто по-справжньому зрозуміти, що це не справжній код стану. Офіційний список знаходиться тут: iana.org/assignments/http-status-codes/…
Еверт

@Evert, що впливає на те, чи стане щось у RFC "офіційним"? Не могли б ви зробити свій коментар відповіддю, щоб я міг його прийняти?
Мохан

@ Мохан, мені неприємно намагатися написати IETF та процес стандартизації невеликим коментарем, тому що я, мабуть, помиляюся. Зрештою, я вважаю, що це пов’язано з відповідними робочими групами IETF.
Еверт

Я використовую його як заповнювач або "завдання", коли створюю веб-програми. Дещо подібна ідея до вигаданих телефонних номерів com.org.uk/phones-telecoms-and-internet/ ... Я можу бути впевнений, що вона ніколи не буде серйозно використана.
Chris Huang-Leaver

15

введіть тут опис зображення

Так, я можу підтвердити, що я бачив, як HTTP 418 повертається із справжнього виробничого сервера. Він існує.


6
Клас WebException відображатиме будь-який код відповіді та текст стану, що повертаються у запиті. Якщо першим рядком заголовка відповіді було "432 One Zero", повідомленням буде "Віддалений сервер повернув помилку: (432) One Zero". Можливо, було б корисніше дізнатися, на який сервер ви телефонували, коли сталася ця помилка, та на якому програмному забезпеченні вона працювала.
wizulus

6

Так, це "справжній" код, оскільки насправді він був опублікований як офіційний RFC Робочою групою з питань Інтернет-інженерії, але цей RFC був опублікований 1 квітня і мався на увазі як квітневий жарт дурнів (разом з рештою Hyper Text Control Pot Coffee Control Протокол), не для законної реалізації. Ось чому більшість сайтів використовують його як писанку, але в іншому випадку уникають цього. Як зазначається у цьому коментарі , часто існують більш відповідні статуси, такі як 400 (поганий запит). Все сказане, завдяки ІТ-співтовариству, тепер це зарезервований код, тому не сподівайтесь, що він скоро піде кудись.

Примітно, за словами Ларрі Мастерна (автора цього RFC, передбаченого Вікіпедією), розширення HTTP, про яке йдеться, насправді виконує (сатиричну) мету: "воно визначає багато способів неналежного розширення HTTP".


1

Я думаю, що безпечніше розглядати 418 як зарезервований код, який колись мав напівофіційне значення, але зараз офіційно "неприсвоєний".

Я припускаю, що в історичному плані про ці коди думали дещо інакше, ніж зараз. Сьогодні це звучить безглуздо і смішно; мабуть, не було?

Іншими словами, я б уникав використання цього коду.


"Напевно, цього не було" ні, насправді це, в основному, лише першо квітневий жарт. Люди, не звертаючи уваги на день квітня, коли RFC вийшов, могли подумати, що це серйозна річ!
Twisted Code
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.