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.
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)").
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 .
@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
Sí, puedo confirmar que he visto HTTP 418 regresando de un servidor de producción real. Existe.
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).
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?
Respuestas:
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)
.fuente
http
en Python 3.9.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
fuente
Sí, puedo confirmar que he visto HTTP 418 regresando de un servidor de producción real. Existe.
fuente
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".
fuente
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.
fuente