Comment un sous-domaine est-il transmis au serveur Web?

12

Je sais que dns résout une adresse telle que example.com en une adresse IP telle que 11.22.33.44, mais je suis un peu confus quant à la résolution des sous-domaines. Ainsi, lorsque vous tapez http://subdomain.example.com , quoi est passé au serveur à 11.22.33.44? En d'autres termes, example.com = 11.22.33.44, mais subdomain.example.com/path = ???

Est-ce que "sous-domaine" et "chemin" sont passés en tant qu'en-têtes http, ou mappés dans l'URL d'une manière ou d'une autre, ou quoi?

Merci d'avance.

Edit: Si je comprends bien, BloodPhilia dit que subdomain.example.com est en réalité un domaine différent qui, en principe, pourrait être résolu en une adresse IP totalement différente. Mais si tel est le cas, qu’en est-il des hôtes qui ont un grand nombre de sous-domaines (à quoi ils ressemblent), mais qui mappent en fait sur un chemin du site. Par exemple, blogspot héberge des millions de blogs et ils ressemblent tous à ceci:

aaa.blogspot.com
bbb.blogspot.com
...millions more...
yyy.blogspot.com
zzz.blogspot.com

Ce ne sont clairement pas des sous-domaines avec leur propre adresse IP, mais plutôt un mappage comme aaa.blogspot.com -> www.blogspot.com/aaa, mais comment cela est-il accompli? Qu'est-ce qui est réellement transmis au serveur Web à l'adresse blogspot.com?

Joshua Frank
la source

Réponses:

18

Les domaines, sous-domaines, sous-sous-domaines et sous (x) -sous-sous-domaines (constitués des deux derniers!) Sont traités exactement de la même manière par DNS à un utilisateur final et à un serveur Web.

Par exemple, le serveur DNS peut renvoyer des résultats différents pour domain.com, www.domain.comou mysite.domain.com.

Maintenant, comme vous le savez probablement, il existe beaucoup plus de domaines que les IP dans le monde.

Pour cette raison, les serveurs utilisent ce que l’on appelle des "en-têtes d’hôte" afin de fournir le bon contenu.

Peu importe ce que vous demandez réellement, votre ordinateur traite tout de la même manière: il vérifie l'adresse IP du DNS auquel il doit se connecter et, une fois connecté, il envoie l'en-tête de l'hôte dans le cadre de la demande. Le serveur Web renvoie ensuite le contenu pour lequel il a été configuré.

Wfetch est un bon outil de test / apprentissage / diagnostic, il peut être téléchargé ici .

Voici un exemple des en-têtes envoyés lors de l'accès à superuser.com

texte alternatif

Voici la configuration des en-têtes d’hôte dans IIS (un serveur Web):

texte alternatif

(Image d' ici )

Si vous étiez intéressé, Serverfault.com et Superuser.com sont sur la même adresse IP et c'est la technique utilisée pour séparer les sites et servir un contenu différent.

Pour plus de lecture sur le sujet, vous voudrez peut-être lire l'article de Wikipedia sur l'hébergement virtuel .

(Je sais que vous comprenez les bases, mais je pensais que ce serait bien d'en dire un peu plus pour que quiconque cherche sur Google puisse apprendre un peu s'il le souhaite!)

Modifier

Donc, selon votre exemple, je suppose qu'une personne aussi grosse que blogspot a très probablement une entrée DNS générique (une entrée générique renvoie le même résultat pour toute requête) qui pointe vers un équilibreur de charge, puis l'équilibreur de charge l'envoie à de nombreux serveurs Web différents qui ne disposent probablement pas d'un site distinct par en-tête d'hôte, mais d'un site / script unique sur lequel l'adresse saisie (en-têtes d'hôte ou non) est analysée et extrait le contenu correct de leur CDN à ce moment-là.

Bien qu'il soit également possible (mais peu probable) qu'ils aient simplement quelques milliers d'entrées par adresse IP, l'adresse IP mène à quelques serveurs et ils ont simplement une entrée pour chaque site ayant un en-tête d'hôte correspondant.

William Hilsum
la source
1
Agréable! Remarque secondaire: le fait que deux sites Web partagent une adresse IP ne signifie pas nécessairement qu'ils sont toujours hébergés sur le même ordinateur. En fait, un équilibreur de charge peut également examiner ces en-têtes et les déléguer à différentes machines. (Pour Super User et al, voir aussi le centre de données de New York de Stack Overflow , que je n'ai pas vraiment lu moi-même ...)
Arjan
@Arjan +1 bon point ... J'ai mentionné les équilibreurs de charge, mais il peut évidemment s'agir uniquement de l'adresse IP d'un équilibreur de charge, puis ils répartissent les demandes sur de nombreux serveurs.
William Hilsum
1
Marqué comme réponse pour les informations détaillées et les liens vers des recherches plus approfondies. Merci!
Joshua Frank le
6

En effet, si deux domaines ont la même adresse IP, le serveur s’appuie sur le navigateur pour spécifier le domaine demandé. Comme :

GET / HTTP/1.1
Host: data.stackexchange.com
Arjan
la source
3

Les sous-domaines ne sont pas le mot juste. Généralement, un sous-domaine est un domaine à lui seul. Par conséquent, sub.example.com est d'abord transmis au DNS. Si aucun enregistrement spécifique n'est trouvé pour ce sous-domaine, la demande est transmise à l'adresse IP du domaine supérieur. (example.com) Sur ce serveur, la demande est à nouveau effectuée et le serveur agira en conséquence.

En d'autres termes, une demande à example.com ne diffère pas vraiment d'une demande à sub.example.com.

BloodPhilia
la source
Je pense que je ne comprends peut-être pas quelque chose d'important ici. Laissez-moi éditer et clarifier ma question. Merci.
Joshua Frank le
Voulez-vous dire que si sub.example.comcela ne résout pas, l'adresse IP de example.comserait utilisée? Je pense que les navigateurs ne font pas ça. (À moins qu'il y ait un enregistrement DNS générique, mais alors le sous-domaine serait résolu, je dirais.)
Arjan
1

Subdomain.example.com ne résout pas en 11.22.33.44 - aux fins de votre question, il dispose généralement de son propre enregistrement DNS A et est résolu en une adresse différente.

Il est possible d'autoriser la résolution du sous-domaine à la même adresse que le domaine parent et toujours de serveur vers le haut de pages différentes, mais si vous faites cela, vous devez héberger les deux sites sur le même serveur Web et en avoir besoin pour la configuration de votre serveur. La manière dont vous en tenez compte dépend du type de serveur Web que vous utilisez.

Joel Coehoorn
la source
1
Voulez-vous dire que, dans mon exemple blogspot, "xyz.blogspot.com" n'aura aucune entrée DNS dédiée, de sorte que DNS recherchera "blogspot.com" et le trouvera à 11.22.33.44. Mais il enverra l'URL entière "xyz.blogspot.com" en tant que champ hôte, et il appartient au serveur de l'analyser et d'envoyer la page xyz au navigateur?
Joshua Frank le
Oui c'est vrai.
Joel Coehoorn
nslookup dummy.example.comrendements server can't find dummy.example.com- comment cela correspond-il à ce qui précède? (Comme pour l'exemple dans le commentaire de @ Joshua?)
Arjan
désolé, vous avez toujours besoin d'un enregistrement A pour votre sous-domaine - c'est juste qu'il peut donner la même adresse IP si vous le souhaitez.
Joel Coehoorn
Ensuite, je suis à nouveau confus. S'il existe des millions de sous-domaines xyz.blogspot.com, ils ne peuvent pas tous avoir des enregistrements A, comment le routage est-il effectué? Et la configuration de l'enregistrement A est côté serveur. Je voudrais savoir comment le client pourrait savoir, avec une URL, si le xyz est un sous-domaine approprié ou quelque chose qui est mappé du côté serveur. En particulier, est-il toujours prudent de mettre en cache une adresse IP pendant un petit moment, car vous savez que x.domain.com et y.domain.com se trouvent sur le même serveur, ou pouvez-vous ne jamais savoir en regardant simplement l'URL?
Joshua Frank le