Czy 418 „I'm a teapot” to naprawdę kod odpowiedzi HTTP?

Odpowiedzi:

122

Używam tego kodu. Mam żądania zwrotnego proxy nginx do dwóch oddzielnych serwerów HTTP. Jedna obsługuje żądania nieuwierzytelnionych użytkowników, a druga obsługuje żądania uwierzytelnionych użytkowników. Problem w tym konkretnym przypadku polega na tym, że pierwszy serwer jest tym, który określa, czy użytkownik jest uwierzytelniony. Proszę nie pytaj dlaczego.

Jeśli więc pierwszy serwer stwierdzi, że użytkownik jest uwierzytelniony, odpowiada 418 I'm a teapot. Następnie NGINX przekierowuje ruch wewnętrznie na drugi serwer. Jeśli chodzi o przeglądarkę, było to pojedyncze żądanie.

Jest to zgodne z duchem kodu HTCPCP 418 , ponieważ jeśli spróbujesz ZAPARZYĆ za pomocą czajnika, właściwą odpowiedzią będzie „Nie jestem osobą, która może obsłużyć to żądanie, ale mogą istnieć inne”. .. Innymi słowy, „Jestem czajniczkiem. Znajdź ekspres do kawy”. (drugim serwerem jest ekspres do kawy).

Ostatecznie, chociaż 418 nie jest wyraźnie zdefiniowany w RFC 7231 , nadal jest objęty parasolem 4xx (Client Error).

6. Kody stanu odpowiedzi

  • 4xx (błąd klienta): Żądanie zawiera złą składnię lub nie może zostać spełnione

6.5. Błąd klienta 4xx

  • Klasa 4xx (błąd klienta) kodu stanu wskazuje, że klient prawdopodobnie popełnił błąd. Z wyjątkiem odpowiedzi na żądanie HEAD, serwer POWINIEN wysłać reprezentację zawierającą wyjaśnienie sytuacji błędu oraz czy jest to stan tymczasowy czy trwały. Te kody stanu mają zastosowanie do każdej metody żądania. Programy użytkownika POWINNY wyświetlać użytkownikowi wszelkie dołączone reprezentacje.
wizulus
źródło
2
Mam zewnętrznego dostawcę (bardzo złego), który odpowiedziałby 418, gdybyś nie znalazł nagłówka Accept. Zawsze myślałem, że to dlatego, że są po prostu złe, ale to właściwie wyjaśnia, co się dzieje. Nadal jednak nie wybacza im wycieku kodu statusu z ich serwerów
Hoffmann
7
@Hoffmann Mogło być właściwe, aby odpowiedzieli 400 złymi żądaniami lub 415 nieobsługiwanymi typami mediów, każdy kod 4xx reprezentuje błąd klienta, więc można go w ten sposób zinterpretować.
wizulus
1
Ten kod stanu jest dodawany do standardowego modułu bibliotecznego httpw Pythonie 3.9.
BramAppel
61

Kod odpowiedzi HTTP 418 został pierwotnie zdefiniowany w protokołach RFC 2324 („Hyper Text Coffee Pot Control Protocol (HTCPCP / 1.0)”) i RFC 7168 („The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances (HTCPCP-TEA)”).

Według Wikipedii: Lista kodów stanu HTTP: # 418

Ten kod został zdefiniowany w 1998 roku jako jeden z tradycyjnych żartów IETF April Fools , w RFC 2324 , Hyper Text Coffee Pot Control Protocol i nie oczekuje się, że zostanie wdrożony przez rzeczywiste serwery HTTP . Dokument RFC określa, że ​​ten kod powinien być zwracany przez czajniki żądane do parzenia kawy. Ten stan HTTP jest używany jako jajko wielkanocne w niektórych witrynach, w tym w Google.com .

Remy Lebeau
źródło
10
Warto wyjaśnić, że to nie jest prawdziwy kod statusu. Oficjalna lista jest tutaj: iana.org/ assignments
Evert
@Evert co wpływa na to, czy coś w RFC stanie się „oficjalne”? Czy mógłbyś zamienić swój komentarz w odpowiedź, abym mógł go zaakceptować?
Mohan,
@Mohan Nie czuję się dobrze, próbując napisać IETF i proces standaryzacji w małym komentarzu, ponieważ prawdopodobnie trochę się pomylę. Ostatecznie uważam, że leży to w gestii odpowiednich grup roboczych IETF.
Evert
Używam go jako symbolu zastępczego lub „rzeczy do zrobienia” podczas tworzenia aplikacji internetowych. Nieco podobny pomysł do fikcyjnych numerów telefonów ofcom.org.uk/phones-telecoms-and-internet/… Jestem pewien, że nigdy nie będzie używany na poważnie.
Chris Huang-Leaver
15

wprowadź opis obrazu tutaj

Tak, mogę potwierdzić, że widziałem, jak HTTP 418 wraca z prawdziwego serwera produkcyjnego. Ona istnieje.

Fiach Reid
źródło
6
Klasa WebException wyświetli dowolny kod odpowiedzi i tekst statusu zwrócony w żądaniu. Gdyby pierwszy wiersz nagłówka odpowiedzi brzmiał „432 One Zero”, komunikat brzmiałby: „Serwer zdalny zwrócił błąd: (432) One Zero”. Bardziej pomocne może być poznanie serwera, do którego dzwoniłeś, kiedy wystąpił ten błąd i jakie oprogramowanie było na nim uruchomione.
wizulus
6

Tak, to „prawdziwy” kod, ponieważ został opublikowany jako oficjalny dokument RFC przez Internet Engineering Task Force, ale ten dokument RFC został opublikowany 1 kwietnia i miał być żartem na prima aprilis (wraz z resztą Hyper Text Coffee Pot Control Protokół), a nie do legalnej implementacji. Dlatego większość witryn używa go jako pisanki, ale poza tym należy go unikać. Jak zauważono w tym komentarzu , często istnieją bardziej odpowiednie stany, takie jak 400 (złe żądanie). Wszystko to powiedziawszy, dzięki społeczności IT, jest to teraz zarezerwowany kod, więc nie spodziewaj się, że wkrótce pojawi się gdziekolwiek.

Warto zauważyć, że według Larry'ego Masintera (autora tego RFC rzekomego w Wikipedii), to rozszerzenie HTTP faktycznie służy (satyrycznemu) celowi: „identyfikuje wiele sposobów, w jakie HTTP został niewłaściwie rozszerzony”.

Skręcony kod
źródło
1

Myślę, że bezpieczniej jest traktować 418 jako zastrzeżony kod, który kiedyś miał w połowie oficjalne znaczenie, ale teraz jest oficjalnie „nieprzypisany”.

Zakładam, że historycznie o tych kodach myślano inaczej niż teraz. Dziś brzmi to bezsensownie i zabawnie; prawdopodobnie nie było?

Innymi słowy, unikałbym używania tego kodu.

Audrius Meskauskas
źródło
„Prawdopodobnie nie było” nie, właściwie to właściwie żart primaaprilisowy. Ludzie, którzy nie zwracali uwagi na to, jaki był kwiecień, kiedy wyszło RFC, mogli pomyśleć, że to poważna sprawa!
Twisted Code