Os servidores da Web possuem apenas um site cada?
Quando você começa a aprender como os nomes de domínio, os endereços IP, os servidores da Web e os sites se encaixam e funcionam juntos, às vezes pode ser um pouco confuso ou avassalador. Como tudo está configurado para funcionar tão bem? O post de perguntas e respostas do SuperUser de hoje tem as respostas para as perguntas de um curioso leitor.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..
Foto cedida por Rosmarie Voegtli (Flickr).
A questão
O superusuário user3407319 quer saber se os servidores da web possuem apenas um site cada:
Com base no que entendo sobre o DNS e vinculando um nome de domínio ao endereço IP do servidor da Web em que um site está armazenado, isso significa que cada servidor da Web pode ter apenas um site? Se os servidores da web possuem mais de um site, como tudo isso é resolvido para que eu possa acessar o site que eu quero sem problemas ou misturas??
Os servidores da Web têm apenas um site cada ou têm mais?
A resposta
O colaborador do SuperUser Bob tem a resposta para nós:
Basicamente, o navegador inclui o nome de domínio na solicitação de HTTP para que o servidor da Web saiba qual domínio foi solicitado e pode responder de acordo.
Solicitações HTTP
Veja como acontece o seu pedido HTTP típico:
1. O usuário fornece uma URL, no formato http: // host: port / path.
2. O navegador extrai a parte do host (domínio) da URL e traduz em um endereço IP (se necessário) em um processo conhecido como resolução de nomes. Esta tradução pode ocorrer via DNS, mas não é necessário (por exemplo, o arquivo de hosts locais em sistemas operacionais comuns ignora o DNS).
3. O navegador abre uma conexão TCP com a porta especificada ou padroniza a porta 80 nesse endereço IP.
4. O navegador envia uma solicitação HTTP. Para o HTTP / 1.1, parece com isso:
O cabeçalho do host é padrão e requerido no HTTP / 1.1. Não foi especificado na especificação HTTP / 1.0, mas alguns servidores o suportam de qualquer maneira.
A partir daqui, o servidor da Web possui várias informações que podem ser usadas para decidir qual deve ser a resposta. Observe que é possível que um único servidor da Web seja vinculado a vários endereços IP.
- O endereço IP solicitado, do soquete TCP (o endereço IP do cliente também está disponível, mas isso raramente é usado e, às vezes, para bloquear / filtrar)
- A porta solicitada, do soquete TCP
- O nome do host solicitado, conforme especificado no cabeçalho do host pelo navegador na solicitação HTTP
- O caminho solicitado
- Quaisquer outros cabeçalhos (cookies, etc.)
Como você parece ter notado, a configuração de hospedagem compartilhada mais comum atualmente coloca vários sites em um único endereço IP: combinação de portas, deixando apenas o host para diferenciar entre os sites..
Isso é conhecido como um host virtual baseado em nome no Apache-land, enquanto o Nginx os chama nomes de servidor em blocos de servidor e o IIS prefere o Virtual Server.
O que sobre HTTPS?
HTTPS é um pouco diferente. Tudo é idêntico ao estabelecimento da conexão TCP, mas depois disso um túnel TLS criptografado deve ser estabelecido. O objetivo é não vazar nenhuma informação sobre o pedido.
Para verificar se o servidor da Web realmente possui esse domínio, o servidor da Web deve enviar um certificado assinado por um terceiro confiável. O navegador irá comparar este certificado com o domínio solicitado.
Isso apresenta um problema. Como o servidor da Web sabe qual certificado de host / site enviar se precisar fazer isso antes que a solicitação HTTP seja recebida??
Tradicionalmente, isso foi resolvido com um endereço IP dedicado (ou porta) para todos os sites que exigem HTTPS. Obviamente, isso se tornou problemático, já que estamos ficando sem endereços IPv4.
Digite SNI (Indicação do nome do servidor). O navegador agora passa o nome do host durante as negociações de TLS, de modo que o servidor da Web tenha essas informações com antecedência suficiente para enviar o certificado correto. No lado do servidor da Web, a configuração é muito semelhante a como os hosts virtuais HTTP são configurados.
A desvantagem é que o nome do host agora é passado como texto simples antes da criptografia e é essencialmente uma informação que vazou. Isso geralmente é considerado um compromisso aceitável, embora considerar o nome do host normalmente exposto em uma consulta DNS de qualquer maneira.
E se você solicitar um site somente por endereço IP??
O que o servidor da Web faz quando não sabe qual host específico você solicitou depende da implementação e configuração do servidor da web. Geralmente, há um website "padrão", "catch-all" ou "fall back" especificado que fornecerá respostas a todas as solicitações que não especificarem explicitamente um host.
Esse site padrão pode ser seu próprio site independente (geralmente mostrando uma mensagem de erro) ou pode ser qualquer um dos outros sites no servidor da Web, dependendo das preferências do administrador do servidor da Web..
Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.