¿Es 418 “I'm a teapot” realmente un código de respuesta HTTP?

Respuestas:

108

Yo uso este código. Tengo solicitudes de proxy inverso nginx a dos servidores HTTP separados. Uno maneja las solicitudes de usuarios no autenticados y el segundo maneja las solicitudes de usuarios autenticados. El problema en este caso en particular, es que el primer servidor es el que determina si el usuario está autenticado. Por favor, no preguntes por qué.

Entonces, si el primer servidor determina que el usuario está autenticado, responde 418 I'm a teapot. Luego, NGINX redirige el tráfico internamente al segundo servidor. En lo que respecta al navegador, fue una única solicitud.

Esto está en el espíritu del código HTCPCP 418 , porque si intenta PREPARAR con una tetera, la respuesta adecuada es "No soy el tipo de persona que puede manejar esa solicitud, pero puede haber otras". .. En otras palabras, "Soy una tetera. Encuentra una cafetera". (el segundo servidor es la cafetera).

En última instancia, aunque 418 no se define explícitamente en RFC 7231 , todavía está cubierto por el paraguas de 4xx (Client Error).

6. Códigos de estado de respuesta

  • 4xx (Error del cliente): la solicitud contiene una sintaxis incorrecta o no se puede cumplir

6.5. Error de cliente 4xx

  • La clase de código de estado 4xx (Error del cliente) indica que el cliente parece haberse equivocado. Excepto cuando se responde a una solicitud HEAD, el servidor DEBE enviar una representación que contenga una explicación de la situación del error, y si es una condición temporal o permanente. Estos códigos de estado son aplicables a cualquier método de solicitud. Los agentes de usuario DEBEN mostrar al usuario cualquier representación incluida.
wizulus
fuente
2
Tengo un proveedor de terceros (uno realmente malo) que respondería con 418 si faltara el encabezado Aceptar. Siempre pensé que era simplemente porque eran malos, pero esto en realidad explica lo que estaba pasando. Sin embargo, todavía no los perdona por filtrar ese código de estado de sus servidores
Hoffmann
7
@Hoffmann Puede haber sido apropiado para ellos responder con 400 Bad Request o 415 Unsupported Media Type, cualquier código 4xx representa un error del cliente, por lo que podría interpretarse de esa manera.
wizulus
1
Este código de estado se agrega al módulo de biblioteca estándar httpen Python 3.9.
BramAppel
56

El código de respuesta HTTP 418 se definió originalmente en los protocolos RFC 2324 ("Protocolo de control de cafetera Hyper Text (HTCPCP / 1.0)") y RFC 7168 ("Protocolo de control de cafetera Hyper Text para electrodomésticos Tea Efflux (HTCPCP-TEA)").

Según Wikipedia: Lista de códigos de estado HTTP: # 418

Este código se definió en 1998 como una de las bromas tradicionales de IETF April Fools , en RFC 2324 , Protocolo de control de cafetera de Hyper Text , y no se espera que lo implementen los servidores HTTP reales . La RFC especifica que este código debe ser devuelto por las teteras solicitadas para preparar café. Este estado HTTP se utiliza como un huevo de Pascua en algunos sitios web, incluido Google.com .

Remy Lebeau
fuente
8
Vale la pena dejar muy claro que no es un código de estado real. La lista oficial está aquí: iana.org/assignments/http-status-codes/…
Evert
@Evertir ¿qué afecta si algo en un RFC se vuelve "oficial"? ¿Podría convertir su comentario en una respuesta para que pueda aceptarla?
Mohan
@Mohan No me siento bien al intentar escribir el IETF y el proceso de estandarización en un pequeño comentario porque probablemente me equivoque. En última instancia, creo que esto recae en los grupos de trabajo relevantes del IETF.
Evert
12

ingrese la descripción de la imagen aquí

Sí, puedo confirmar que he visto HTTP 418 regresando de un servidor de producción real. Existe.

Fiach Reid
fuente
5
La clase WebException mostrará cualquier código de respuesta y texto de estado que se devuelva en la solicitud. Si la primera línea del encabezado de respuesta era "432 One Zero", el mensaje sería "El servidor remoto devolvió un error: (432) One Zero". Puede resultar más útil saber a qué servidor estaba llamando cuando se produjo este error y qué software estaba ejecutando.
wizulus
3

Sí, es un código "real" en el sentido de que en realidad fue publicado como un RFC oficial por el Grupo de Trabajo de Ingeniería de Internet, pero ese RFC se publicó el 1 de abril y tenía la intención de ser una broma de los inocentes (junto con el resto de Hyper Text Coffee Pot Control Protocolo), no para una implementación legítima. Es por eso que la mayoría de los sitios lo usan como un huevo de Pascua, pero por lo demás lo evitan. Como se indica en este comentario , a menudo hay estados más apropiados como 400 (Solicitud incorrecta).

En particular, según Larry Masinter (el autor de ese RFC supuestamente por Wikipedia), la extensión HTTP en cuestión en realidad tiene un propósito (satírico): "identifica muchas de las formas en las que HTTP se ha extendido de manera inapropiada".

Código retorcido
fuente
1

Creo que es más seguro tratar el 418 como un código reservado que alguna vez tuvo un significado medio oficial, pero ahora oficialmente "no asignado".

Supongo que históricamente algo se ha pensado de manera diferente sobre estos códigos de lo que es ahora. Hoy esto suena divertido y sin sentido; probablemente no lo fue?

En otras palabras, evitaría usar este código.

Audrius Meskauskas
fuente