17Aug
Quando você começa a aprender como nomes de domínio, endereços IP, servidores web e sites se encaixam e funcionam juntos, pode ser um pouco confuso ou esmagador às vezes. Como tudo está configurado para funcionar de forma tão suave? O Super-usuário Q & A publica as respostas às perguntas de um leitor curioso.
Pergunta de hoje e amp;A sessão de atendimento chega a cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento comunitário de sites Q & A.
Foto cortesia de Rosmarie Voegtli( Flickr).
A pergunta
O usuário do usuário SuperUser3407319 quer saber se os servidores web possuem apenas um site cada:
Com base no que entendo sobre o DNS e ligando um nome de domínio com o endereço IP do servidor web, um site está armazenado, isso significa que cada umo servidor web só pode armazenar um site? Se os servidores web ocupam mais de um site, então, como tudo isso é resolvido para que eu possa acessar o site que eu quero sem problemas ou problemas?
Os servidores web apenas possuem um site cada, ou eles possuem mais?
A Resposta
Contribuinte do SuperUser Bob tem a resposta para nós:
Basicamente, o navegador inclui o nome do domínio na solicitação HTTP para que o servidor web saiba qual domínio foi solicitado e pode responder de acordo.
Solicitações HTTP
Veja como ocorre sua solicitação HTTP típica:
1. O usuário fornece um URL, no formulário http: // host: port / path.
2. O navegador extrai a parte do host( domínio) do URL e o traduz em um endereço IP( se necessário) em um processo conhecido como resolução de nomes. Essa tradução pode ocorrer via DNS, mas não precisa( por exemplo, o arquivo de hosts locais em sistemas operacionais comuns ignora o DNS).
3. O navegador abre uma conexão TCP para a porta especificada ou padrão na porta 80 nesse endereço IP.
4. O navegador envia uma solicitação HTTP.Para HTTP / 1.1, parece assim:
O cabeçalho do host é padrão e requerido em HTTP / 1.1.Não foi especificado na especificação HTTP / 1.0, mas alguns servidores o suporta de qualquer maneira.
A partir daqui, o servidor web possui várias informações que podem usar para decidir qual a resposta que deve ser. Observe que é possível que um único servidor web seja vinculado a vários endereços IP.
- O endereço IP solicitado, a partir 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, comoespecificado no cabeçalho do host pelo navegador na solicitação HTTP
- O caminho solicitado
- Qualquer outro cabeçalho( 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 diferenciar entre 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 servidor virtual.
Sobre a 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 divulgar informações sobre o pedido.
Para verificar se o servidor web possui esse domínio, o servidor web deve enviar um certificado assinado por um terceiro confiável. O navegador comparará esse certificado com o domínio solicitado.
Isso apresenta um problema. Como o servidor web sabe qual o certificado do host / site para enviar se ele precisa fazer isso antes que a solicitação HTTP seja recebida?
Tradicionalmente, isso foi resolvido por ter um endereço IP dedicado( ou porta) para cada site que exigisse HTTPS.Obviamente, isso se tornou problemático, pois 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 do TLS, de modo que o servidor da Web tenha essa informação suficientemente cedo para enviar o certificado correto. No lado do servidor web, a configuração é muito semelhante à forma como os hosts virtuais HTTP estão configurados.
A desvantagem é que o nome do host agora passou como texto simples antes da criptografia, e é essencialmente vazado. Isso geralmente é considerado um trade-off aceitável considerando que o nome do host normalmente está exposto em uma consulta DNS de qualquer maneira.
E se você solicitar um site apenas por endereço IP?
O que o servidor da Web faz quando não sabe qual host específico que você solicitou depende da implementação e configuração do servidor web. Normalmente, existe um site "padrão", "catch-all" ou "recuar" especificado que fornecerá respostas a todos os pedidos que não especificam explicitamente um host.
Este site padrão pode ser seu próprio site independente( muitas vezes mostrando uma mensagem de erro), ou pode ser qualquer um dos outros sites no servidor web, dependendo das preferências do administrador do servidor web.
Tem alguma coisa a adicionar à explicação? Som desligado nos comentários. Deseja ler mais respostas de outros usuários Tech-savvy Stack Exchange? Confira o tópico de discussão completo aqui.