Se eu tiver example.com
na minha lista de pesquisa de sufixo DNS e eu abrir um navegador e digitar, www
o navegador se comunicará com o sistema operacional, que se comunicará com o DNS; se www
não conseguir resolver, meu sistema operacional anexará os itens da minha lista de pesquisa de sufixo até que um seja bem-sucedido; www.example.com
se for bem-sucedido, obtenho um IP para o qual minha solicitação será enviada.
No entanto, olhando para a solicitação que meu navegador envia, o cabeçalho do host é definido www
como o que foi digitado na barra de endereços, mesmo que esse não seja o FQDN que foi eventualmente resolvido para o IP. Isso significa que se o servidor web usar a vinculação de nome de host, ele tem que ouvir www
também o FQDN de www.example.com
, ou ele não reconhecerá a solicitação como sendo uma que ele deveria manipular.
Algum navegador tem funcionalidade para obter automaticamente o FQDN resolvido de volta do SO / há alguma configuração que possa ser ajustada para habilitar isso? Se não houver tal funcionalidade, há um motivo (por exemplo, talvez o SO não exponha informações sobre o FQDN que foi resolvido com sucesso por algum motivo de segurança?), ou esse cenário é muito específico para qualquer um implementar?
Eu diria que é muito específico, mas também, uma razão de segurança. O nome do host da URL fornecida pelo usuário não é usado apenas para o cabeçalho HTTP Host; ele também é usado para corresponder ao certificado TLS do servidor e para selecionar o principal Kerberos do servidor – dois recursos onde o objetivo é evitar a representação do servidor por invasores de rede ativos.
Quando você considera que o Windows tenta o sufixo DNS mesmo com nomes que seriam considerados qualificados (por exemplo, ele expandirá www.google.com para www.google.com.example.com ), você pode ver onde isso pode levar – um servidor DNS desonesto redireciona você para um servidor diferente que tem um certificado para www.google.com.example.com e o navegador o aceitaria, mesmo que não seja isso que o usuário visitou?
(O resolvedor de sistema usual fornece o nome completo, por exemplo, ai_canonname em getaddrinfo(), e na verdade o Unix Kerberos ainda confia no DNS para isso – mitigado apenas pela natureza fechada do registro principal do Kerberos – mas o ponto ainda é válido para TLS e para o Windows Kerberos.)