A solicitação HTTP em questão não é realmente válida, a menos que o navegador esteja conversando com um intermediário (proxy).
Seu exemplo seria um pouco mais parecido com o seguinte se o navegador estivesse conversando diretamente com um servidor da Web:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Agora, para colocar isso em perspectiva, considere o modelo OSI:
Temos 3 sistemas em ação:
- Um cliente executando o navegador
- Um servidor da web que atende o site
- Um servidor DNS que conhece o endereço IP do site
Os protocolos envolvidos são, de baixo para cima (conjunto mínimo relevante para OP):
A comunicação HTTP é feita através do protocolo TCP (o TCP está no topo do protocolo IP) enquanto a comunicação DNS, neste caso, é feita no protocolo UDP (o UDP também está no topo do protocolo IP).
Aqui está a sequência de comunicação em resumo:
O cliente , executando o navegador, pede ao servidor DNS para um A
recorde para www.pippo.it
, utilizando o protocolo UDP.
1.1 No cliente, é o sistema operacional que faz a parte de resolução e retorna ao navegador - o navegador nunca se comunica diretamente com o servidor DNS, mas pelo sistema operacional, invocando gethostbyname () ou o getaddrinfo () mais recente . No Windows, a ordem em que o sistema operacional resolve endereços é provavelmente definida por algo como isso , enquanto no Linux a precedência resolver é definida por/etc/nsswitch.conf
O servidor DNS , usando o protocolo UDP, responde ao cliente com um endereço IP / registro, se existir
O cliente abre uma conexão TCP na porta 80 do servidor da web e grava o seguinte texto:
Solicitação HTTP:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Você pode imitar a mesma coisa fazendo algo assim no console ou no prompt de comando:
> telnet www.pippo.it 80
Trying 195.128.235.49...
Connected to www.pippo.it.
Escape character is '^]'.
GET /hello.htm HTTP/1.1
Host: www.pippo.it
seguido por duas linhas vazias. Se o conteúdo solicitado existir, o servidor da web o imprimirá na tela. Se houver um navegador do outro lado, o texto da resposta será analisado pelo navegador e todas as tags, links, scripts e imagens serão renderizados no que chamamos de página da web.
Na realidade, existem mais alguns detalhes, por exemplo, navegadores podem armazenar em cache endereços IP se você já visitou algum domínio, para que a resolução do DNS se torne desnecessária. Além disso, os navegadores modernos podem tentar resolver antes que você realmente precise ( pré-busca de DNS ) para acelerar sua navegação.
Além disso, seu computador pode ter registros estáticos em um hosts
arquivo. Se um registro corresponder à solicitação, a entrada estática local será usada primeiro e nenhum servidor DNS será contatado. Isso é configurável e não necessariamente verdadeiro, mas é o padrão nos sistemas operacionais com os quais estou familiarizado.