Lorsque vous commencez à apprendre les noms de domaine, les adresses IP, les serveurs web, et tous les sites web de la fit et de travailler ensemble, il peut être un peu déroutant ou écrasante à certains moments. Comment est-il mis en place pour travailler avec tellement de douceur? Aujourd’hui SuperUser Q&Un post a la réponse à un lecteur curieux de questions.
Aujourd’hui, la Question Et la Réponse session nous vient de courtoisie de super-Utilisateur—une subdivision de Stack Exchange, l’un piloté par la communauté de regroupement de Q&A des sites web.
Photo avec l’aimable autorisation de Rosmarie Voegtli (Flickr).
La Question
SuperUser lecteur user3407319 veut savoir si les serveurs web seulement tenir un site web de chaque:
Basé sur ce que j’ai compris sur le DNS et de lier un nom de domaine avec l’adresse IP du serveur web un site web est stocké, est-ce à dire chaque serveur web ne peut détenir qu’un site web? Si les serveurs web ne détiennent plus d’un site web, alors comment ça se régler afin que je puisse accéder au site web que je veux sans aucun problème ou mix ups?
Ne les serveurs web seulement tenir un site web, ou est-ce 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 pour que le serveur web sait de domaine qui a été demandé et peut réagir en conséquence.
Les Requêtes HTTP
Voici comment votre typique de la requête HTTP qui se passe:
1. L’utilisateur fournit une URL dans le formulaire http://host:port/path.
2. Le navigateur extraits de l’hôte (domaine) de la partie de l’URL et les traduit en une adresse IP (si nécessaire) dans un processus connu sous le nom de résolution. Cette traduction peut se produire via DNS, mais il ne fonctionne pas (par exemple, le fichier hosts local sur les systèmes d’exploitation courants contourne DNS).
3. Le navigateur ouvre une connexion TCP vers le port spécifié, ou par défaut le port 80 sur l’adresse IP.
4. Le navigateur envoie une requête HTTP. Pour HTTP/1.1, il ressemble à ceci:
L’en-tête d’hôte est standard et nécessaire dans HTTP/1.1. Il n’était pas spécifié dans les spécifications HTTP/1.0, mais certains serveurs soutien de toute façon.
À partir d’ici, le serveur web a plusieurs éléments d’information qu’il peut utiliser pour décider quelle est la réaction. Notez qu’il est possible pour un seul serveur web pour être lié à plusieurs adresses IP.
- L’adresse IP demandée, à partir de la socket TCP (l’adresse IP du client est également disponible, mais c’est rarement utilisé, et parfois pour le blocage/filtrage)
- Le port demandé, à partir de la socket TCP
- La demande de nom d’hôte, tel que spécifié dans l’en-tête d’hôte par le navigateur dans la requête HTTP
- Le chemin demandé
- Tous les autres en-têtes (cookies, etc.)
Comme vous semblez l’avoir remarqué, la plupart des communes de la configuration de l’hébergement partagé ces jours-ci met plusieurs sites web sur une seule adresse IP:port, laissant seulement l’hôte de différencier les sites web.
Ceci est connu comme un Nom d’Hôte Virtuel Apache-terre, tandis que Nginx les appelle les Noms de Serveur en Serveur de Blocs, et IIS préfère Serveur Virtuel.
Qu’en HTTPS?
HTTPS est un peu différent. Tout est identique jusqu’à l’établissement de la connexion TCP, mais après que chiffré tunnel TLS doit être établi. L’objectif n’est pas de fuite de toutes les informations au sujet de la demande.
Afin de vérifier que le serveur web est le propriétaire de ce domaine, le serveur web doit envoyer un certificat signé par un tiers de confiance. Le navigateur va alors comparer ce certificat avec le domaine qu’il demandait.
Cela pose un problème. Comment fonctionne le serveur web de savoir lequel d’accueil/site web du certificat à envoyer si il doit le faire avant que la requête HTTP est reçu?
Traditionnellement, il a été résolu par le fait d’avoir une adresse IP dédiée (ou port) pour chaque site web avec le protocole HTTPS. Évidemment, c’est devenu problématique que nous sommes à court d’adresses IPv4.
Entrez SNI (Server Name Indication). Le navigateur passe maintenant le nom de l’hôte au cours de la TLS négociations, de sorte que le serveur web a cette information suffisamment tôt pour envoyer le certificat approprié. Sur le web côté serveur, la configuration est très similaire à la façon dont HTTP hôtes virtuels sont configurés.
L’inconvénient, c’est le nom d’hôte est maintenant passé en tant que texte brut avant de chiffrement, et est essentiellement la fuite d’informations. C’est généralement considérée comme un compromis acceptable bien que considérant le nom d’hôte est généralement exposée à une requête DNS de toute façon.
Que faire Si Vous demandez une Site web par Adresse IP?
Ce que le serveur web ne quand il ne sait pas spécifiques de l’hôte que vous avez demandé dépend du serveur web de mise en œuvre et la configuration. Généralement, il y a un “défaut”, “fourre-tout”, ou “chute en arrière” site web spécifié qui fournira une réponse à toutes les demandes qui ne sont pas explicitement spécifier un hôte.
Ce site web par défaut peut être son propre site web indépendant (souvent avec un message d’erreur), ou il pourrait être l’un des autres sites web sur le serveur web en fonction des préférences du serveur web admin.
Quelque chose à ajouter à l’explication? Le son off dans les commentaires. Envie d’en lire plus de réponses à partir d’autres tech-savvy Pile utilisateurs Exchange? Découvrez le fil de discussion ici.