Ist 418 "Ich bin eine Teekanne" wirklich ein HTTP-Antwortcode?


Antworten:


110

Ich benutze diesen Code. Ich habe Nginx-Reverse-Proxy-Anforderungen an zwei separate HTTP-Server. Einer behandelt Anfragen für nicht authentifizierte Benutzer und der zweite Anfragen für authentifizierte Benutzer. Das Problem in diesem speziellen Fall ist, dass der erste Server derjenige ist, der bestimmt, ob der Benutzer authentifiziert ist. Bitte fragen Sie nicht warum.

Wenn der erste Server feststellt, dass der Benutzer authentifiziert ist, antwortet er 418 I'm a teapot. NGINX leitet den Datenverkehr dann intern zum zweiten Server um. Für den Browser war es eine einzelne Anfrage.

Dies ist im Sinne des HTCPCP-Codes 418 , denn wenn Sie versuchen, mit einer Teekanne zu BRAUEN, lautet die entsprechende Antwort: "Ich bin nicht die Art von Dingen, die diese Anfrage bearbeiten können, aber es kann andere geben." Mit anderen Worten: "Ich bin eine Teekanne. Finde eine Kaffeemaschine." (Der zweite Server ist die Kaffeemaschine).

Obwohl 418 in RFC 7231 nicht explizit definiert ist , wird es letztendlich immer noch vom Dach von abgedeckt 4xx (Client Error).

6. Antwortstatuscodes

  • 4xx (Client-Fehler): Die Anforderung enthält eine falsche Syntax oder kann nicht erfüllt werden

6.5. Client-Fehler 4xx

  • Die Statuscodeklasse 4xx (Client Error) zeigt an, dass der Client einen Fehler aufgetreten zu sein scheint. Außer bei der Beantwortung einer HEAD-Anfrage sollte der Server eine Darstellung senden, die eine Erläuterung der Fehlersituation enthält und angibt, ob es sich um eine vorübergehende oder eine dauerhafte Bedingung handelt. Diese Statuscodes gelten für jede Anforderungsmethode. Benutzeragenten sollten dem Benutzer alle enthaltenen Darstellungen anzeigen.

2
Ich habe einen Drittanbieter (einen wirklich schlechten), der mit 418 antworten würde, wenn Sie den Accept-Header vermissen würden. Ich dachte immer, es sei, weil sie einfach schlecht waren, aber das erklärt tatsächlich, was passiert ist. Verzeiht ihnen immer noch nicht, dass sie diesen Statuscode von ihren Servern verloren haben
Hoffmann,

7
@Hoffmann Es war möglicherweise angebracht, mit 400 Bad Request oder 415 Unsupported Media Type zu antworten. Jeder 4xx-Code stellt einen Clientfehler dar und kann daher so interpretiert werden.
Wizulus

1
Dieser Statuscode wird dem Standardbibliotheksmodul httpin Python 3.9 hinzugefügt .
BramAppel

57

Der HTTP-Antwortcode 418 wurde ursprünglich in RFC 2324 ("Hyper Text Coffee Pot Control Protocol (HTCPCP / 1.0)") und RFC 7168 definiert ("Das Hyper Text Coffee Pot Control Protocol für Tea Efflux Appliances (HTCPCP-TEA)") definiert.

Per Wikipedia: Liste der HTTP-Statuscodes: # 418

Dieser Code wurde 1998 als einer der traditionellen Witze der IETF- Aprilscherze in RFC 2324 , Hyper Text Coffee Pot Control Protocol , definiert und wird voraussichtlich nicht von tatsächlichen HTTP-Servern implementiert . Der RFC legt fest, dass dieser Code von Teekannen zurückgegeben werden soll, die zum Brühen von Kaffee angefordert werden. Dieser HTTP-Status wird auf einigen Websites, einschließlich Google.com, als Osterei verwendet .


8
Es lohnt sich wirklich klar zu machen, dass es sich nicht um einen echten Statuscode handelt. Die offizielle Liste ist hier: iana.org/assignments/http-status-codes/…
Evert

@Evertieren, was beeinflusst, ob etwas in einem RFC "offiziell" wird? Könnten Sie Ihren Kommentar zu einer Antwort machen, damit ich ihn akzeptieren kann?
Mohan

@Mohan Ich fühle mich nicht gut, wenn ich versuche, den IETF- und Standardisierungsprozess in einen kleinen Kommentar zu schreiben, weil ich wahrscheinlich etwas falsch machen werde. Letztendlich glaube ich, dass dies bei den relevanten IETF-Arbeitsgruppen liegt.
Evert

12

Geben Sie hier die Bildbeschreibung ein

Ja, ich kann bestätigen, dass HTTP 418 von einem echten Produktionsserver zurückkommt. Es existiert.


5
Die WebException-Klasse zeigt den Antwortcode und den Statustext an, die in der Anforderung zurückgegeben werden. Wenn die erste Zeile des Antwortheaders "432 One Zero" lautet, lautet die Meldung "Der Remote-Server hat einen Fehler zurückgegeben: (432) One Zero". Es ist möglicherweise hilfreicher zu wissen, welchen Server Sie zum Zeitpunkt dieses Fehlers angerufen haben und welche Software ausgeführt wurde.
Wizulus

4

Ja, es ist ein "echter" Code, da er tatsächlich als offizieller RFC von der Internet Engineering Task Force veröffentlicht wurde, aber dieser RFC wurde am 1. April veröffentlicht und ist als Aprilscherz gedacht (zusammen mit dem Rest von Hyper Text Coffee Pot Control) Protokoll), nicht zur legitimen Umsetzung. Das ist der Grund, warum die meisten Websites es als Osterei verwenden, es aber ansonsten vermeiden. Wie in diesem Kommentar erwähnt , gibt es häufig geeignetere Status wie 400 (Bad Request).

Laut Larry Masinter (dem Autor des von Wikipedia behaupteten RFC) dient die fragliche HTTP-Erweiterung tatsächlich einem (satirischen) Zweck: "Sie identifiziert viele der Arten, in denen HTTP unangemessen erweitert wurde."


1

Ich denke, es ist sicherer, 418 als reservierten Code zu behandeln, der einst eine halboffizielle Bedeutung hatte, jetzt aber offiziell "nicht zugewiesen" ist.

Ich nehme an, historisch gesehen wurde etwas anders über diese Codes gedacht als jetzt. Das klingt heute bedeutungslos und lustig; war wohl nicht?

Mit anderen Worten, ich würde die Verwendung dieses Codes vermeiden.


"Wahrscheinlich nicht" nein, eigentlich ist es so ziemlich nur ein Aprilscherz. Leute, die nicht darauf geachtet haben, an welchem ​​Tag im April der RFC ausgegangen ist, haben vielleicht gedacht, dass es eine ernste Sache ist!
Twisted Code vor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.