Algo a ter em mente em relação ao HTTP é que toda a comunicação entre o navegador e o servidor da web ocorre no TCP, que usa endereços IP. A resolução do nome, como você disse, acontece primeiro, porque sem o endereço IP, nenhuma comunicação pode ocorrer.
Assim, a Internet funciona bem, e você pode até mesmo acessar sites sem DNS, mesmo que você não tenha nomes no seu arquivo hosts
, desde que você conheça o endereço IP.
Agora, para contradizer o que eu acabei de dizer um pouco, já que sua pergunta é especificamente sobre HTTP, a verdade é que alguns sites não funcionarão se você tentar acessá-los diretamente pelo endereço IP.
Isso pode ocorrer por vários motivos, mas um dos mais comuns é que o servidor da Web realmente hospeda muitos sites diferentes em um único IP e, em seguida, diferencia solicitações para esses sites com base no nome do host solicitado.
Isso é feito como parte da solicitação HTTP, adicionando um cabeçalho Host:
. O navegador usa o nome que você deu na barra de endereço para preencher esse cabeçalho durante a solicitação, mas falando estritamente, isso não tem nada a ver com o DNS.
Uma outra maneira de navegar por IP pode ser problemática é em sites HTTPS, porque os certificados são emitidos para determinados nomes de host. Isso não impedirá que eles funcionem, mas o certificado não pode ser verificado pelo navegador, pois o nome não corresponde e você receberá um aviso.