17Aug

Les serveurs Web ne détiennent 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'intègrent et fonctionnent ensemble, il peut parfois être déroutant ou accablant. Comment tout est-il mis en place pour fonctionner si bien? Le SuperUser Q & A d'aujourd'hui a les réponses aux questions d'un lecteur curieux.

Question d'aujourd'hui &La session de réponse nous est offerte par SuperUser, une subdivision de Stack Exchange, un regroupement communautaire de sites Web Q & A.

Photo publiée avec l'aimable autorisation de Rosmarie Voegtli( Flickr).

La question

SuperUser lecteur user3407319 veut savoir si les serveurs Web ne détiennent qu'un site Web chacun:

Basé sur ce que je comprends sur le DNS et reliant un nom de domaine avec l'adresse IP du serveur web, un site web est stocké, cela signifie-t-ilLe serveur Web ne peut contenir qu'un site Web? Si les serveurs Web hébergent plus d'un site Web, comment tout cela se résout-t-il pour que je puisse accéder au site Web que je recherche sans aucun problème ou confusion?

Les serveurs Web ne contiennent chacun qu'un site Web ou en détiennent-ils plus?

La réponse

SuperUser contributeur Bob a la réponse 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 peut répondre en conséquence.

Requêtes HTTP

Voici comment se passe votre requête HTTP:

1. L'utilisateur fournit une URL au format http: // host: port / path.

2. Le navigateur extrait la partie hôte( domaine) de l'URL et la traduit en une adresse IP( si nécessaire) dans un processus connu sous le nom de résolution de nom. Cette traduction peut se faire via DNS, mais elle n'a pas à le faire( par exemple, le fichier hosts local sur les systèmes d'exploitation courants contourne DNS).

3. Le navigateur ouvre une connexion TCP au port spécifié, ou par défaut le port 80 sur 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.Il n'a pas été spécifié dans la spécification HTTP / 1.0, mais certains serveurs le supportent quand même.

A partir de là, le serveur web dispose de plusieurs informations qu'il peut utiliser pour décider de la réponse à apporter. 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 rarement utilisée, et parfois pour bloquer / filtrer)
  • Le port demandé, à partir du socket TCP
  • Le nom d'hôte demandé, commespécifié dans l'en-tête de l'hôte par le navigateur dans la requête HTTP
  • Le chemin demandé
  • Tous les autres en-têtes( cookies, etc.)

Comme vous avez pu le constater, la configuration d'hébergement mutualisé la plus courante place plusieurs sites web sur une même adresse IP: combinaison de port, laissant seulement l'hôte pour faire la différence entre les sites Web.

Ceci est connu comme un hôte virtuel basé sur le nom dans Apache-land, tandis que Nginx les appelle les noms de serveurs dans les blocs de serveur, et IIS préfère Virtual Server.

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 divulguer aucune information sur la demande.

Afin de vérifier que le serveur Web possède effectivement ce domaine, le serveur Web doit envoyer un certificat signé par un tiers de confiance. Le navigateur compare ensuite ce certificat avec le domaine demandé.

Cela présente un problème. Comment le serveur Web sait-il quel certificat d'hôte / de site Web envoyer s'il doit le faire avant la réception de la requête HTTP?

Traditionnellement, cela a été résolu en ayant une adresse IP dédiée( ou 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 pendant les négociations TLS, de sorte que le serveur Web dispose de ces informations assez tôt pour envoyer le bon certificat. Côté 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 est essentiellement une fuite d'informations. Cela est généralement considéré comme un compromis acceptable, même si le nom d'hôte est normalement exposé dans une requête DNS de toute façon.

Que faire si vous demandez un site Web par adresse IP seulement?

Ce que fait le serveur Web lorsqu'il ne sait pas quel hôte spécifique vous avez demandé dépend de l'implémentation et de la configuration du serveur Web. Généralement, il existe un site Web «par défaut», «attrape-tout» ou «repli» qui fournira des réponses à toutes les demandes qui ne spécifient 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 il peut s'agir de l'un des autres sites Web sur le serveur Web, selon les préférences de l'administrateur du serveur Web.

Avoir quelque chose à ajouter à l'explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d'autres utilisateurs de Stack Exchange? Découvrez le fil de discussion complet ici.