Skip to content

Código de status HTTP · Erros do servidor (5xx)

Erro 505 HTTP Version Not Supported

O erro 505 HTTP Version Not Supported significa que o servidor não suporta, ou se recusa a suportar, a versão principal do HTTP usada no pedido. A causa mais comum é um cliente escrito à mão ou mal configurado colocando algo como HTTP/2.0 ou HTTP/0.9 numa linha de requisição HTTP/1.x.

Dados sobre este código de status
Classe5xx, Erros do servidor
Definido emRFC 9110 §15.6.6
Pode ir para o cache por padrãoSó com Cache-Control ou Expires explícitos
Pode repetir o pedidoSó com outra versão do HTTP, normalmente HTTP/1.1
Cabeçalhos relevantes
  • Upgrade: o servidor pode usá-lo para anunciar os protocolos que suporta

O que significa o 505

A RFC 9110, seção 15.6.6, diz que o 505 significa que o servidor não pode ou não quer concluir o pedido usando a mesma versão principal do cliente, e que a resposta deve explicar o motivo e quais protocolos ele suporta. Só a versão principal conta: um servidor HTTP/1.1 precisa aceitar pedidos HTTP/1.0.

O navegador praticamente nunca provoca esse erro, porque HTTP/2 e HTTP/3 são negociados no handshake TLS (ALPN), e não escritos numa linha de texto do pedido. Onde o 505 aparece é em clientes crus e scanners. O net/http do Go, por exemplo, responde 505 "unsupported protocol version" a qualquer linha que declare HTTP/0.x ou HTTP/2 em diante, exceto o prefácio de conexão do HTTP/2. Os balanceadores da AWS devolvem 505 quando um pedido HTTP/2 chega numa conexão estabelecida como HTTP/1.

Causas comuns

Se você está visitando o site

  • Muito improvável num navegador comum. Se aparecer, um proxy antigo, extensão ou equipamento de rede do seu lado pode estar reescrevendo os pedidos.

Se você administra o servidor

  • Um cliente ou script próprio escreve a linha do pedido à mão com a versão errada, como "HTTP/2.0" num socket TCP comum.
  • Um proxy ou balanceador encaminha frames HTTP/2 para um backend que espera HTTP/1.1, ou o contrário.
  • Um scanner de segurança testando versões obsoletas ou inventadas.

Como resolver

Se você está visitando o site

  • Tente outro navegador ou outra rede, e desative extensões ou proxies que alteram o tráfego.

Se você administra o servidor

  • Use uma biblioteca HTTP de verdade em vez de montar a linha do pedido à mão, e deixe ela negociar o HTTP/2 via ALPN.
  • Confira a configuração de protocolo entre proxy e backend: por exemplo a versão de protocolo do target group num ALB da AWS, ou o proxy_http_version do nginx, que só fala HTTP/1.0 ou 1.1 com os upstreams.

Como diagnosticar o 505

O código da sua aplicação não envia 505; a biblioteca do servidor HTTP recusa a linha do pedido antes de qualquer handler rodar.

Terminal
# Reproduce against a local Go server: HTTP/3.0 in an HTTP/1 request line
printf 'GET / HTTP/3.0\r\nHost: localhost\r\n\r\n' | nc localhost 8080
# HTTP/1.1 505 HTTP Version Not Supported

Costuma ser confundido com

505 vs 426
O 426 Upgrade Required manda o cliente trocar de protocolo antes de tentar de novo; o 505 apenas recusa a versão que foi usada.
505 vs 400
Uma versão que nem está bem formada, como "HTTP/um", normalmente recebe 400; o 505 é para uma versão válida que o servidor não aceita falar.

Perguntas frequentes

O navegador pode receber erro 505?
Na prática, não. O navegador negocia HTTP/2 e HTTP/3 via TLS (ALPN) e volta para HTTP/1.1 sem problema. Um 505 no navegador indica algo no meio do caminho, como um proxy com defeito, reescrevendo o pedido.
Um servidor HTTP/1.1 precisa aceitar HTTP/1.0?
Sim. A verificação do 505 vale só para a versão principal. Um servidor HTTP/1.1 tem que aceitar pedidos HTTP/1.0 e responder de um jeito que clientes HTTP/1.0 entendam.
Como testar quais versões do HTTP um servidor suporta?
Use o curl com --http1.1, --http2 ou --http3 e adicione -v para ver o que foi negociado. O curl mostra o protocolo na linha de status da resposta, como "HTTP/2 200".

Revisado em por Arielton Oberek.