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?

Author: chad, 2017-04-01

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

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.

Como mencionado por Darrel Miller, as especificações podem ser encontradas em RFC7230 .
 54
Author: Psi, 2018-04-25 07:43:55

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.

Https://tools.ietf.org/html/rfc7230#section-5.4

 6
Author: Darrel Miller, 2017-11-19 01:52:49