La solicitud HTTP en cuestión no es válida a menos que el navegador esté hablando con un intermediario (proxy).
Su ejemplo se parecería un poco más al siguiente si el navegador estaba hablando directamente con un servidor web:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Ahora, para poner esto en perspectiva, considere el modelo OSI:
Tenemos 3 sistemas en acción:
- Un cliente que ejecuta el navegador.
- Un servidor web que sirve el sitio
- Un servidor DNS que conozca la dirección IP del sitio
Los protocolos involucrados son, de abajo hacia arriba (mínimo relevante establecido en OP):
La comunicación HTTP se realiza a través del protocolo TCP (TCP está por encima del protocolo IP) mientras que la comunicación DNS, en este caso, se realiza a través del protocolo UDP (UDP también está por encima del protocolo IP).
Aquí está la secuencia de comunicación en resumen:
El cliente , que ejecuta el navegador, le pide al servidor DNS un A
registro www.pippo.it
, utilizando el protocolo UDP.
1.1. En el cliente, es el sistema operativo el que hace la parte de resolución y responde al navegador --- el navegador nunca se comunica directamente con el servidor DNS, sino a través del sistema operativo invocando gethostbyname () o el nuevo getaddrinfo () . En Windows, el orden en que el sistema operativo resuelve direcciones probablemente se define por algo como esto , mientras que en Linux la prioridad de resolución se define por/etc/nsswitch.conf
El servidor DNS , utilizando el protocolo UDP, responde al cliente con un registro / dirección IP, si existe
El cliente abre una conexión TCP en el puerto 80 del servidor web y escribe el siguiente texto:
Solicitud HTTP:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Puede imitar lo mismo haciendo algo como esto en su consola o símbolo del sistema:
> 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 de dos líneas vacías. Si el contenido solicitado existe, el servidor web lo imprimirá en la pantalla. Si hay un navegador en el otro lado, el texto de respuesta es analizado por el navegador, y todas las etiquetas, enlaces, scripts e imágenes se representan en lo que llamamos una página web.
En realidad, hay algunos detalles más, por ejemplo, los navegadores pueden almacenar en caché las direcciones IP si ya visitó algún dominio, por lo que la resolución de DNS se vuelve innecesaria. Además, los navegadores modernos pueden intentar resolver antes de que realmente lo necesite ( captación previa de DNS ) para acelerar su navegación.
Además, su computadora puede tener registros estáticos en un hosts
archivo. Si un registro coincide con la solicitud, la entrada estática local se usa primero y nunca se contacta a ningún servidor DNS. Esto es configurable y no necesariamente cierto, pero es el valor predeterminado en los sistemas operativos con los que estoy familiarizado.