Les serveurs Web ne possèdent-ils qu'un site Web chacun?
Lorsque vous commencez à apprendre comment les noms de domaine, les adresses IP, les serveurs Web et les sites Web s'emboîtent et fonctionnent ensemble, cela peut parfois être un peu déroutant ou accablant. Comment est-ce que tout est configuré pour fonctionner si bien? Le message de questions et réponses du superutilisateur d'aujourd'hui contient les réponses aux questions d'un lecteur curieux.
La séance de questions et réponses d'aujourd'hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté..
Photo gracieuseté de Rosmarie Voegtli (Flickr).
La question
Le lecteur superutilisateur User3407319 souhaite savoir si les serveurs Web ne contiennent qu'un site Web chacun:
D'après ce que je comprends du DNS et de la liaison d'un nom de domaine avec l'adresse IP du serveur Web sur lequel un site Web est stocké, cela signifie-t-il que chaque serveur Web ne peut contenir qu'un seul site Web? Si les serveurs Web contiennent plusieurs sites Web, comment les résoudre tous afin que je puisse accéder au site Web que je souhaite sans aucun problème ni confusion?
Les serveurs Web ne possèdent-ils qu'un site Web chacun, ou en ont-ils plus?
La réponse
Le contributeur de SuperUser, Bob, a la solution pour nous:
Fondamentalement, le navigateur inclut le nom de domaine dans la requête HTTP afin que le serveur Web sache quel domaine a été demandé et puisse répondre en conséquence..
Requêtes HTTP
Voici comment se passe votre requête HTTP typique:
1. L'utilisateur fournit une URL, sous la forme http: // hôte: port / chemin.
2. Le navigateur extrait la partie hôte (domaine) de l'URL et la traduit en adresse IP (si nécessaire) dans le cadre d'un processus appelé résolution de nom. Cette traduction peut se faire via DNS, mais cela n’est pas nécessaire (par exemple, le fichier des hôtes locaux sur les systèmes d’exploitation courants contourne DNS).
3. Le navigateur ouvre une connexion TCP sur le port spécifié ou utilise par défaut le port 80 pour cette adresse IP..
4. Le navigateur envoie une requête HTTP. Pour HTTP / 1.1, cela ressemble à ceci:
L'en-tête de l'hôte est standard et requis dans HTTP / 1.1. Cela n'a pas été spécifié dans les spécifications HTTP / 1.0, mais certains serveurs le supportent quand même..
À partir de là, le serveur Web dispose de plusieurs informations qu'il peut utiliser pour décider de la réponse. Notez qu'il est possible qu'un seul serveur Web soit lié à plusieurs adresses IP..
- L'adresse IP demandée, à partir du socket TCP (l'adresse IP du client est également disponible, mais elle est rarement utilisée et parfois pour le blocage / filtrage)
- Le port demandé, depuis le socket TCP
- Le nom d'hôte demandé, tel que spécifié dans l'en-tête d'hôte par le navigateur dans la requête HTTP
- Le chemin demandé
- Autres en-têtes (cookies, etc.)
Comme vous semblez l'avoir remarqué, la configuration d'hébergement mutualisé la plus courante de nos jours met plusieurs sites Web sous une seule adresse IP: combinaison de port, laissant ainsi à l'hôte la distinction entre les sites Web..
Cela s'appelle un hôte virtuel basé sur un nom dans Apache-land, tandis que Nginx les appelle noms de serveur dans des blocs de serveur, et IIS préfère serveur virtuel..
Qu'en est-il de HTTPS?
HTTPS est un peu différent. Tout est identique jusqu'à l'établissement de la connexion TCP, mais après cela, un tunnel TLS crypté doit être établi. L'objectif est de ne pas divulguer d'informations sur la demande.
Afin de vérifier que le serveur Web est bien le propriétaire de ce domaine, il doit envoyer un certificat signé par un tiers de confiance. Le navigateur comparera ensuite ce certificat avec le domaine demandé.
Cela pose un problème. Comment le serveur Web sait-il quel certificat d'hôte / site Web envoyer s'il doit le faire avant la réception de la demande HTTP?
Traditionnellement, cela était résolu en ayant une adresse IP dédiée (ou un port) pour chaque site Web nécessitant HTTPS. Évidemment, cela est devenu problématique car nous manquons d'adresses IPv4.
Entrez SNI (Indication du nom du serveur). Le navigateur transmet maintenant le nom d'hôte lors des négociations TLS, de sorte que le serveur Web dispose de ces informations suffisamment tôt pour envoyer le certificat correct. Du côté du serveur Web, la configuration est très similaire à la configuration des hôtes virtuels HTTP..
L'inconvénient est que le nom d'hôte est maintenant passé en texte brut avant le cryptage et constitue essentiellement une fuite d'informations. Ceci est généralement considéré comme un compromis acceptable bien que le nom d'hôte soit normalement exposé dans une requête DNS de toute façon..
Que faire si vous demandez un site Web par adresse IP uniquement??
Ce que le serveur Web fait lorsqu'il ne sait pas quel hôte spécifique vous avez demandé dépend de la mise en œuvre et de la configuration du serveur Web. En règle générale, il existe un site Web «par défaut», «fourre-tout» ou «repli» spécifié qui fournira des réponses à toutes les demandes ne spécifiant pas explicitement un hôte..
Ce site Web par défaut peut être son propre site Web indépendant (affichant souvent un message d'erreur) ou bien l'un des autres sites Web du serveur Web, en fonction des préférences de l'administrateur du serveur Web..
Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.