Red de conocimiento informático - Problemas con los teléfonos móviles - Causas comunes y ejemplos de solicitud incorrecta HTTP 400 en Tomcat

Causas comunes y ejemplos de solicitud incorrecta HTTP 400 en Tomcat

En el desarrollo web, las solicitudes HTTP 400 incorrectas son un problema común pero difícil de localizar, generalmente porque la solicitud no cumple con los estándares HTTP. La razón parece intuitiva, pero localizar estos problemas a menudo requiere mucho esfuerzo. Hay varias dificultades:

En este artículo, compartiremos ejemplos de la vida real de entornos de producción reales.

Este artículo está basado en tomcat-embed-core-9.0.29

Para obtener más información, consulte la siguiente publicación del blog

Debido a la actualización de LB, el tráfico Después de cambiar del LB antiguo al nuevo LB, todas las respuestas de algunos clientes se convirtieron en 400 MALA SOLICITUD.

Ejemplo de cabeceras de solicitud enviadas por el cliente. "VERSIÓN DE LA APLICACIÓN: 519", el espacio antes de los dos puntos es un carácter ilegal.

La lógica de llamadas de Tomcat es la siguiente. En el método parseHeader(), el método isToken() se utiliza para comprobar caracteres ilegales en el encabezado de la solicitud.

org.apache.coyote.http11.Http11Processor#service: parseHeaders y captura IllegalArgumentException

org.apache.coyote.http11.Http11Processor#service: parseHeaders y captura IllegalArgumentException

org.apache.coyote.http11.Http11Processor#service: método parseHeader() y detecta una excepción de carácter ilegal. Http11.Http11InputBuffer#parseHeader: parseHeaders y capture IllegalArgumentException en skipLine(). IS_TOKEN es un mapa de bits utilizado para almacenar caracteres ilegales, incluidos '''', ''('')'''', etc.

org.apache.coyote.http11.Http11InputBuffer#skipLine: genera una excepción

Las siguientes son situaciones en las que se devolverá una solicitud incorrecta HTTP 400 en tomcat-embed-core- 9.0.29 Resumen, con ejemplos.

Los siguientes ejemplos son todos mensajes HTTP. El caso 0 es una solicitud que devuelve correctamente 200. Los siguientes ejemplos se basan en el caso 0, resaltando los cambios en naranja y resaltando las palabras clave que conducen a 400 en rojo, de modo que. Explique el problema de manera más intuitiva.

Muestra 200

Muestra 200

org.apache.coyote.> Muestra 400

org.apache.coyote.AbstractProcessor#line 337

Lógica de caracteres ilegal: org.apache.tomcat.util.http.HttpParser.DomainParseState#next

400 Ejemplo

org.apache.coyote.AbractProcessor #line 337

Lógica de caracteres ilegal: org.apache.tomcat.util.http.

Sin ejemplo

org.apache.coyote.http11.Http11Processor#line 311

Juego de caracteres: org.apache.tomcat.util.http.parser.DomainParseState#next 400 Ejemplo p>

9. El nombre del protocolo en la línea inicial es ilegal

org.apache.coyote.http11

org.apache.coyote.http11.Http11Processor#. línea 713

Juego de caracteres: org.apache.tomcat.util.http.parser.

Muestra 400

org.apache.coyote.http11.Http11Processor# línea 713

Conjunto de caracteres: org.apache.tomcat.util.http.parser. Ejemplo

12. Múltiples longitudes de contenido en encabezados de solicitud

org.apache.coyote.http11.Http11Processor#line 741

400 Ejemplo