O que causa um Apache 400?

O que causa um Apache 400?

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 400resposta, 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 400resposta é 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 o Host:cabeçalho não foi incluído na solicitação e esse cabeçalho é obrigatório em HTTP/1.1

  • Razoavelmente 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.

informação relacionada