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,