O que é o cabeçalho da máquina http?
Dado que a ligação TCP já está estabelecida quando o pedido HTTP é enviado, o endereço IP e o porto são implicitamente conhecidos -- uma ligação TCP é um porto IP+. Então, de quem precisamos do cabeçalho? Isto só é necessário para o caso de existirem várias máquinas mapeadas para o endereço IP implícito na conexão TCP?
2 answers
O cabeçalho host
diz ao servidor web que a máquina virtual deve usar (se estiver configurada). Você pode até ter a mesma máquina virtual usando vários nomes alternativos (=domínios e domínios de caracteres especiais). Neste caso, você ainda tem a possibilidade de ler esse cabeçalho manualmente em seu aplicativo web se você quiser fornecer um comportamento diferente com base em diferentes domínios abordados. Isto é possível porque em seu servidor web você pode (e se não estou enganado você deve) configurar Um vhost para ser a máquina padrão. Este vhost predefinido é usado sempre que o host
-header não corresponder a nenhuma das máquinas virtuais configuradas.
Que significa: Você obtê-lo direito, embora dizendo: "vários hosts" pode ser enganosa: O host (a endereçado máquina) é o mesmo, o que realmente é resolvido para o endereço IP são diferentes nomes de domínio (incluindo subdomínios) que são também referidos como nomes de host (mas não de hosts!).
Embora não faça parte da pergunta, um fato divertido: Esta especificação leva a problemas com SSL nos primeiros dias porque o servidor web tem que entregar o certificado que corresponde ao domínio que o cliente abordou. No entanto, para saber que Certificado usar, o servidor Web deve ter conhecido o hostname endereçado com antecedência. Mas como o cliente envia essa informação apenas através do canal criptografado (o que significa: Depois que o certificado já foi enviado), o servidor teve que assumir que você navegou pela máquina padrão. Que Significado: um domínio protegido por ssl por endereço IP / combinação portuária.
Isto foi superado com indicação do nome do servidor , no entanto, isso quebra de novo alguma privacidade, dado que o nome do servidor é agora Transferido em texto simples novamente, de modo que cada homem-no-meio iria ver, qual o nome da máquina a que está a tentar ligar-se.
Embora o servidor Web conheça o nome da máquina a partir da indicação do nome do servidor, o cabeçalho host
não está obsoleto, porque a indicação do nome do servidor a informação só é usada no aperto de mão TLS. Com uma ligação não segura, não existe nenhuma indicação de nome do servidor, por isso o host
-cabeçalho ainda é válido (e necessário).
Outro facto divertido: a maioria dos webservers (se nem mesmo todos eles) rejeitam o seu pedido de http se não contiver exactamente um host
-cabeçalho, mesmo que possa ser omitido porque existe apenas o vhost predefinido. Isso significa que a informação mínima exigida em um pedido http-(get -) é a primeira linha contendo METHOD
RESOURCE
e PROTOCOL VERSION
e pelo menos o cabeçalho host
, como este:
GET /someresource.html HTTP/1.1
Host: www.example.com
Poderá querer ler a documentação MDN no cabeçalho da máquina para mais informações, que diz
Como mencionado por Darrel Miller, as especificações podem ser encontradas em RFC7230 .Deve ser enviado um campo de cabeçalho da máquina em todas as mensagens de pedido HTTP/1.1. A O código de Estado 400 (mau pedido) será enviado para qualquer pedido HTTP / 1.1 mensagem que não tem um campo de cabeçalho da máquina ou que contém mais de um.
Eu sempre recomendaria ir para a fonte autoritária ao tentar entender o significado e propósito dos cabeçalhos HTTP.
O campo de cabeçalho" máquina " num pedido fornece a máquina e o porto
informação do URI-alvo, que permite ao servidor de origem
distinguir entre os recursos ao mesmo tempo que os pedidos de múltiplos
nomes das máquinas num único endereço IP.