
alguém está ciente de algum documento oficial ou não oficial sobre por que o Apache retorna um código de status 400? Estou ciente de que isso se deve a uma solicitação incorreta do cliente, mas o que constitui uma solicitação incorreta do cliente? Sei que coisas como tamanho de solicitação grande e caracteres inválidos podem causar 400, mas gostaria de algum tipo de lista definitiva.
Por exemplo, o "guia definitivo do apache" da o'reilly não fornece esse detalhe.
Obrigado! Damião
Responder1
AFAIK e quase por definição: não pode haver uma lista definitiva do que causa uma 400
resposta, pois esse código de resposta é para qualquer coisa lançada no Apache httpd, que não pode ser analisada como uma solicitação válida.
Isso pode ser algo que"parece"parecer uma solicitação válida ou pode ser um lixo completo.
A 400
resposta é equivalente a WTF*#K
!
Conforme comentado por @NikitaKipriyanov, o log do Apache (erro) normalmente registra qual linha de solicitação acionou a resposta 400.
Historicamente, uma linha de solicitação HTTP é finalizada com umretorno de carro e alimentação de linhae assim seu log normalmente mostra tudo o que foi lançado no Apache até receber o primeiro retorno de carro e um feed de linha.
Uma pesquisa rápida por 400 respostas em meus logs do Apache mostra um número ou tipos recorrentes de "solicitações incorretas":
O mais comum: umaparência válidaHTTP 1.1uma linha de solicitação, que consiste nométodo de solicitação que diferencia maiúsculas de minúsculas, aespaço, o solicitadoURL, outroespaçoe aversão do protocolocomo:
"GET / HTTP/1.1"
provavelmente foi rejeitado porque oHost:
cabeçalho não foi incluído na solicitação e esse cabeçalho é obrigatório em HTTP/1.1Razoavelmente comum:dados binários (handshake)que aparece como hexadecimal de escape, como por exemplo
"\x16\x03\x01\x01\xfc\x01"
que neste exemplo é causado pela tentativa de estabelecer uma conexão TLS 1.2 na porta HTTP simples 80 (ou qualquer outra porta, mesmo 443, quando nenhum TLS está configurado lá)"\x16\x03\x01
é um handshake TLS 1/1.1 semelhante\x16\x03"
é um handshake SSL3 semelhante- em muitas outras variações
- ou mesmo apenas um
"\n"
Tenta se conectar com umprotocolo completamente diferentedo que HTTP(S) para as portas do servidor web, ou seja
"SSH-2.0-OpenSSH_7.4"
sondar se o SSH é oferecido em uma porta de servidor web (um truque frequentemente usado por administradores de sistemas e usuários para contornar um firewall corporativo)"SSTP_DUPLEX_POST /sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}/ HTTP/1.1"
sondando um endpoint VPN que suporte oProtocolo SSTP- e outros.