O host
cabeçalho informa ao servidor da web qual host virtual usar (se configurado). Você pode até ter o mesmo host virtual usando vários aliases (= domínios e domínios-curinga). Nesse caso, você ainda tem a possibilidade de ler esse cabeçalho manualmente em seu aplicativo da web se desejar fornecer um comportamento diferente com base em diferentes domínios endereçados. Isso é possível porque em seu servidor da web você pode (e se não me engano, você deve) configurar um vhost para ser o host padrão. Este vhost padrão é usado sempre que o host
cabeçalho não corresponde a nenhum dos hosts virtuais configurados.
Isso significa: você acertou, embora dizer "vários hosts" possa ser um tanto enganoso: o host (a máquina endereçada) é o mesmo, o que realmente é resolvido para o endereço IP são nomes de domínio diferentes (incluindo subdomínios) que também são referidos para como nomes de host (mas não hosts!).
Embora não faça parte da pergunta, um fato engraçado: essa especificação causou problemas com SSL nos primeiros dias porque o servidor da web tem que entregar o certificado que corresponde ao domínio que o cliente endereçou. No entanto, para saber qual certificado usar, o servidor da web deve saber o nome do host endereçado com antecedência. Mas, como o cliente envia essa informação apenas pelo canal criptografado (o que significa: depois que o certificado já foi enviado), o servidor teve que assumir que você navegou no host padrão. Isso significava um domínio protegido por SSL por combinação de endereço IP / porta.
Isso foi superado com a indicação do nome do servidor ; no entanto, isso quebra alguma privacidade, já que o nome do servidor agora é transferido em texto simples novamente, de modo que cada intermediário veria a qual nome de host você está tentando se conectar.
Embora o servidor da web conheça o nome do host da Indicação do nome do servidor, o host
cabeçalho não é obsoleto, porque as informações da Indicação do nome do servidor são usadas apenas no handshake TLS. Com uma conexão não segura, não há nenhuma indicação de nome de servidor, portanto, o host
cabeçalho ainda é válido (e necessário).
Outro fato engraçado: a maioria dos servidores web (se não todos) rejeitam sua solicitação http se ela não contiver exatamente um host
cabeçalho, mesmo que possa ser omitido porque há apenas o vhost padrão configurado. Isso significa que o mínimo exigido informações em uma solicitação em HTTP (get-) é a primeira linha contendo METHOD
RESOURCE
e PROTOCOL VERSION
e pelo menos o host
-header, como este:
GET /someresource.html HTTP/1.1
Host: www.example.com
Na documentação do MDN no cabeçalho do host, eles realmente expressam assim:
Um campo de cabeçalho Host deve ser enviado em todas as mensagens de solicitação HTTP / 1.1. Um código de status 400 (Bad Request) será enviado para qualquer mensagem de solicitação HTTP / 1.1 que não tenha um campo de cabeçalho Host ou contenha mais de um.
Conforme mencionado por Darrel Miller, as especificações completas podem ser encontradas em RFC7230 .
vhost
apenas 3 ocorrências próximas devirtual host
com significado não próximo à sua frase e 12 paradefault
principalmente sobre o porto,by the book
configurado corretamente (totalmente )?default
encontrada perto da palavra pela pesquisa,Otherwise, the authority component is assigned the default name configured for the server
virtual host
encontradas por minha pesquisa em tools.ietf.org/html/rfc7230 estão emAppendix A. HTTP Version History
. parece que sua pesquisa encontrou algum outro.Eu sempre recomendaria ir à fonte oficial ao tentar entender o significado e o propósito dos cabeçalhos HTTP.
https://tools.ietf.org/html/rfc7230#section-5.4
fonte