Percebi que enviar GET /
(+CRLF) para alguns servidores da Web (por exemplo, de um provedor de pesquisa conhecido) resulta em uma HTTP/1.0 200 OK
mensagem. Outro servidor da web responde com um HTTP/1.0 400
erro.
Que eu saiba, até o HTTP/1.0 requer o campo de versão. É GET /
(sem protocolo e host) uma solicitação GET abreviada válida e padronizada?
Após algumas pesquisas, descobri que o HTTP/0.9 de 1991 define o seguinte:
- Este pedido é constituído pela palavra "GET", um espaço, o endereço do documento,[...].
- O endereço do documento consistirá em uma única palavra (ou seja, sem espaços). Se mais palavras forem encontradas na linha de solicitação, elas DEVEM ser ignoradas ou tratadas de acordo com a especificação HTTP completa
Com HTTP/0.9 a requisição parece possível. Algumas fontes o chamam de protocolo de uma linha. Não tenho certeza se isso é senso comum ou não. Eu não sabia nem vi isso antes. Os servidores da web devem honrar essa solicitação HTTP/0.9?
Uma solicitação sem número de versão é uma solicitação HTTP/0.9, também conhecida como "solicitação simples". Se suportado, receberá uma resposta muito mais simples do que uma solicitação HTTP/1.0 ou posterior.
RFC 1945, (a especificação HTTP/1.0) inclui a definição para tais solicitações (consulte a seção 5) e exige que os servidores as suportem, mas desencoraja seu uso pelos clientes.
RFC 2068 e RFC 2616 (a versão original e a primeira revisada da especificação HTTP/1.1) não incluem mais a definição para tais solicitações. Eles dizem que "está além do escopo de uma especificação de protocolo exigir conformidade com versões anteriores". mas que "no momento de redigir esta especificação" eles esperariam que "servidores da web comerciais" continuassem suportando http/0.9 e http/1.0.
Quando o http/1.1 foi revisado novamente em 2014, ele foi dividido em uma série de RFCs (RFC 7230 a 7235) em vez de um grande documento. A RFC 7230 recomenda que os servidores que suportam hospedagem virtual baseada em nome não suportem solicitações http/0.9.
A internet é construída sobre "consenso aproximado e código em execução". O IETF faz o possível para documentar esse consenso e fazer recomendações, mas, em última análise, qual nível de compatibilidade com versões anteriores oferecer é uma decisão para implementadores individuais.
Na prática, a web moderna depende fortemente de hospedagem virtual baseada em nomes. Portanto, mesmo que o software do servidor da Web entenda essas solicitações antigas, há uma boa chance de não retornar o documento desejado,