
¿Alguien conoce algún documento oficial o no oficial sobre por qué Apache devuelve un código de estado 400? Soy consciente de que esto se debe a una solicitud incorrecta de un cliente, pero ¿qué constituye una solicitud incorrecta de un cliente? Sé que cosas como un tamaño de solicitud grande y caracteres no válidos pueden causar un 400, pero me gustaría algún tipo de lista definitiva.
Por ejemplo, la "guía definitiva sobre apache" de o'reilly no proporciona este detalle.
¡Gracias! Damián
Respuesta1
AFAIK y casi por definición: no puede haber una lista definitiva de lo que causa una 400
respuesta, ya que ese código de respuesta es para cualquier cosa que se lanza en Apache httpd, que no se puede analizar como una solicitud válida.
Eso puede ser algo que"aparece"parecerse a una solicitud válida o puede ser una completa basura.
La 400
respuesta es el equivalente a WTF*#K
!
Como comentó @NikitaKipriyanov, el registro de apache (error) generalmente registra qué línea de solicitud desencadenó la respuesta 400.
Históricamente, una línea de solicitud HTTP termina con unretorno de carro y avance de líneapor lo que su registro generalmente muestra todo lo que se lanzó a Apache hasta que recibió el primer retorno de carro y un avance de línea.
Una búsqueda rápida de 400 respuestas en mis registros de Apache muestra una cantidad de tipos de "solicitudes incorrectas" recurrentes:
El más común: unmirada válidaHTTP 1.1una línea de solicitud, que consiste en elmétodo de solicitud que distingue entre mayúsculas y minúsculas, aespacio, Lo solicitadoURL, otroespacioy elversión del protocolocomo por ejemplo:
"GET / HTTP/1.1"
lo más probable es que haya sido rechazado porque elHost:
encabezado no se incluyó en la solicitud y ese encabezado es obligatorio en HTTP/1.1Bastante común:datos binarios (apretón de manos)que aparece como hexadecimal escapado como por ejemplo
"\x16\x03\x01\x01\xfc\x01"
que en este ejemplo se debe al intento de establecer una conexión TLS 1.2 en el puerto HTTP simple 80 (o cualquier otro puerto, incluso el 443, cuando no hay TLS configurado allí)"\x16\x03\x01
es un protocolo de enlace TLS 1/1.1 similar\x16\x03"
es un protocolo de enlace SSL3 similar- en muchas otras variaciones
- o incluso solo un
"\n"
Intenta conectarse con unprotocolo completamente diferenteque HTTP(S) a los puertos del servidor web, es decir
"SSH-2.0-OpenSSH_7.4"
sondear si se ofrece SSH en un puerto de servidor web (un truco utilizado a menudo por administradores de sistemas y usuarios para eludir un firewall corporativo)"SSTP_DUPLEX_POST /sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}/ HTTP/1.1"
Buscando un punto final VPN que admita laprotocolo SSTP- y otros.