Algunos servidores web, cuando se accede usando su dirección IP, devuelven un error que indica que el acceso directo a la dirección IP no está permitido.
Hace tiempo que me pregunto cómo funciona esto. Quiero decir, ¿el navegador no siempre resuelve la dirección IP y se conecta a ella? ¿El "acceso directo a la dirección IP" no se salta el DNS? ¿Cómo funciona el servidor remoto siquiera sabe se ha saltado el DNS?
networking
dns
apache-http-server
ip
http
Joseph A.
fuente
fuente
Respuestas:
Para responder a su pregunta de cómo sabe , tiene que ver con lo que su navegador envía al servidor.
Tiene razón en que el sistema siempre lo resuelve en una dirección IP, pero el navegador envía la URL a la que intentó acceder en el encabezado HTTP.
Aquí hay un encabezado de muestra que encontré en línea, modificado para que parezca que usaste Firefox en Windows y escribiste
apple.com
en la barra de direcciones:Así es como se vería el encabezado si usara su dirección IP:
Ambos se enviarían a la misma dirección IP a través de un socket, pero el navegador le dice al servidor a qué accedió.
¿Por qué? Porque los servidores web con la misma dirección IP pueden alojar múltiples sitios y dar diferentes páginas para cada uno. No puede distinguir quién quiere qué página por dirección IP porque todos tienen la misma, pero puede distinguirlos por el encabezado HTTP.
fuente
host
encabezado. Ver este ejemplo .Con el protocolo HTTP 1.1 (la versión anterior de HTTP 1.0 ha estado obsoleta durante bastante tiempo, por lo que es poco probable que sea utilizada por ninguna versión reciente de un navegador),
host
se introdujo el encabezado. Para HTTP 1.1, esa es una línea de encabezado obligatoria que debe emitir un navegador . El navegador incluye el nombre de dominio en esa línea, por ejemploHost: example.com
. Entonces el servidor web sabe a qué sitio web quiere acceder el navegador desde esa línea. Dado que un servidor web puede ser compatible con docenas de sitios web, esa línea es importante para determinar en qué sitio web reside la página solicitada. Suponiendo que el navegador quiere acceder a la página de inicio de un sitio en example.com, emite la siguiente línea al servidor cuando se conecta al servidor:Esa línea especifica que el navegador desea obtener el documento raíz, es decir, "/" para el sitio web. Si quisiera acceder
/somedir/testpage.html
,GET /somedir/testpage.html
estaría en la línea "get". La línea será seguida por la siguiente línea:Entonces, si el servidor web es compatible con los sitios web example.com, someothersite.com, yetanothersite.org, etc., sabe que debería regresar a la página principal de example.com. Si no obtiene esa línea, o no tiene un nombre de dominio en la
Host
línea, no sabe qué página de inicio del sitio web debe devolverse. Por lo tanto, puede devolver un mensaje de error o devolver la página de inicio de un sitio "predeterminado" para el servidor.Puede emitir los mismos comandos que emite un navegador utilizando el protocolo telnet , por ejemplo,
telnet example.com 80
desde un indicador de shell de Linux o una ventana de Terminal Apple OS X , para conectarse al puerto HTTP predeterminado, el puerto 80; consulte Probar el acceso a un sitio web utilizando PuTTY para conocer los pasos. hacerlo con PuTTY en un sistema Windows.fuente
Esto se debe al
Host:
encabezado HTTP. Esto es bastante útil para alojar múltiples sitios en la misma dirección IP. Por ejemplo, http://www.k7dxs.net/ y http://www.philipgrimes.com/ están en la misma dirección IP. Sin embargo, debido alHost:
encabezado, pueden mostrar dos sitios diferentes.Para HTTPS, como señaló @Toothbrush, usan la Indicación de nombre de servidor TLS porque el encabezado del Host es parte de la solicitud encriptada y el servidor no sabe qué certificado ofrecer sin esto.
Experimento divertido: obtenga datos de manipulación para Firefox (no he podido encontrar un equivalente para Chrome) y comience a manipularlos. Abra http://slipstation.com/ y edite el
Host:
encabezado en la solicitud para ser http://www.zombo.com/ . Verá un sitio web posiblemente familiar donde todo es posible.fuente
El servidor web se puede configurar para aceptar solo conexiones a un dominio o subdominio en particular. Podría estar alojando múltiples dominios.
Lo que hace el servidor web cuando se usa una dirección IP directa es configurable. En el caso de Apache, irá por defecto al primer vhost nombrado de los sitios habilitados, que se ordenan alfabéticamente.
Esta es la parte más relevante de la documentación de Apache que he encontrado, después de una búsqueda rápida:
https://httpd.apache.org/docs/current/vhosts/name-based.html
fuente