Certains serveurs Web, lorsqu'ils accèdent à l'aide de leur adresse IP, renvoient une erreur indiquant que l'accès direct à une adresse IP n'est pas autorisé.
Je me demande depuis quelque temps comment cela fonctionne. Je veux dire, le navigateur ne résout-il pas toujours l'adresse IP et s'y connecte-t-il? L '"accès direct aux adresses IP" ne fait-il pas que sauter le DNS? Comment le serveur distant sait- il que vous avez ignoré le DNS?
networking
dns
apache-http-server
ip
http
Joseph A.
la source
la source
Réponses:
Pour répondre à votre question sur la façon dont il sait , cela a à voir avec ce que votre navigateur envoie au serveur.
Vous avez raison de dire que le système le résout toujours en une adresse IP, mais le navigateur envoie l'URL à laquelle vous avez tenté d'accéder dans l'en-tête HTTP.
Voici un exemple d'en-tête que j'ai trouvé en ligne, modifié pour donner l'impression que vous utilisiez Firefox sous Windows et saisi
apple.com
dans la barre d'adresse:Voici à quoi ressemblerait l'en-tête si vous utilisiez son adresse IP:
Ces deux éléments seraient envoyés à la même adresse IP via un socket, mais le navigateur indique au serveur à quoi il a accédé.
Pourquoi? Parce que les serveurs Web avec la même adresse IP peuvent héberger plusieurs sites et donner des pages différentes pour chacun. Il ne peut pas distinguer qui veut quelle page par adresse IP car ils ont tous le même - mais il peut les distinguer par l'en-tête HTTP.
la source
host
tête. Voir cet exemple .Avec le protocole HTTP 1.1 (l'ancienne version HTTP 1.0 était obsolète depuis un certain temps, il est donc peu probable qu'elle soit utilisée par une version récente d'un navigateur), l'en-
host
tête a été introduit. Pour HTTP 1.1, il s'agit d'une ligne d'en-tête obligatoire qui doit être émise par un navigateur . Le nom de domaine est inclus par le navigateur sur cette ligne, par exempleHost: example.com
. Le serveur Web sait donc à quel site Web le navigateur veut accéder à partir de cette ligne. Comme un serveur Web peut prendre en charge des dizaines de sites Web, cette ligne est importante pour déterminer le site Web sur lequel réside la page demandée. En supposant que le navigateur souhaite accéder à la page d'accueil d'un site sur example.com, il envoie la ligne suivante au serveur lorsqu'il se connecte au serveur:Cette ligne spécifie que le navigateur souhaite obtenir le document racine, c'est-à-dire "/" pour le site Web. Si vous vouliez accéder
/somedir/testpage.html
,GET /somedir/testpage.html
serait dans la ligne "get". La ligne sera suivie de la ligne ci-dessous:Ainsi, si le serveur Web prend en charge les sites Web exemple.com, someothersite.com, yetanothersite.org, etc., il sait qu'il doit renvoyer la page principale de example.com. S'il n'obtient pas cette ligne ou si aucun nom de domaine n'y est répertorié
Host
, il ne sait pas quelle page d'accueil du site Web doit être renvoyée. Donc, il peut retourner un message d'erreur ou renvoyer la page d'accueil pour un site "par défaut" pour le serveur.Vous pouvez émettre les mêmes commandes que le navigateur utilisant le protocole telnet , par exemple à
telnet example.com 80
partir d'une invite de shell Linux ou d'une fenêtre de terminal Apple OS X , pour se connecter au port HTTP par défaut, port 80 - voir la section Test de l'accès à un site Web à l'aide de PuTTY . faire ainsi avec PuTTY sur un système Windows.la source
Cela est dû à l'
Host:
en-tête HTTP. Ceci est très utile pour héberger plusieurs sites sur la même adresse IP. Par exemple, http://www.k7dxs.net/ et http://www.philipgrimes.com/ sont tous deux sur la même adresse IP. Cependant, en raison de l'en-Host:
tête, ils peuvent afficher deux sites différents.Pour HTTPS, comme @Toothbrush l'a souligné, ils utilisent l'indication du nom du serveur TLS car l'en-tête de l'hôte fait partie de la demande chiffrée et le serveur ne sait pas quel certificat offrir sans cela.
Expérience amusante: obtenez des données de sabotage pour Firefox (je n'ai pas réussi à trouver un équivalent pour Chrome) et commencez à altérer. Ouvrez http://slipstation.com/ et modifiez l'en-
Host:
tête dans la requête pour devenir http://www.zombo.com/ . Vous verrez un site Web éventuellement familier où tout est possible.la source
Le serveur Web peut être configuré pour accepter uniquement les connexions à un domaine ou à un sous-domaine particulier. Il pourrait héberger plusieurs domaines.
Ce que le serveur Web fait quand une adresse IP directe est utilisée est configurable. Dans le cas d'Apache, il ira par défaut au premier vhost nommé sur les sites activés, qui sont triés par ordre alphabétique.
C’est la partie la plus pertinente de la documentation Apache que j’ai trouvée, après une recherche rapide:
https://httpd.apache.org/docs/current/vhosts/name-based.html
la source