J'ai passé ma carrière à faire toute la programmation d'applications locales (applications C++ et ainsi de suite). Cependant, j'essaie de creuser mes pieds dans le monde du Web. J'utilise Eclipse (Mars) et Apache Tomcat 8.0.23 pour essayer de mettre en place un environnement dans lequel je peux expérimenter et en apprendre davantage sur la programmation côté serveur (JSP, PHP, etc.). J'ai tout configuré de telle sorte que lorsque je tape
localhost:8080
dans mon navigateur, il dirige vers la bonne page Tomcat. Je sais que c'est probablement très simple, mais c'est un peu époustouflant ici.
Que se passe-t-il exactement lorsque je tape localhost?
D'où vient la page Tomcat sinon Internet? Je suis presque sûr que les données proviennent d'un serveur qui, grâce à Tomcat, se trouve sur mon PC, mais comment mon navigateur a-t-il su où trouver les informations uniquement auprès de localhost: 8080?
Je suppose que 8080 est un port ou quelque chose, mais je ne suis vraiment pas sûr de cela non plus et si c'est un port, je ne suis pas vraiment sûr de ce que cela signifie.
Fondamentalement, tout ce que je sais (je pense ...) sur le développement Web côté serveur, c'est que dans le développement Web HTML/CSS pur, tout le travail est effectué localement une fois que tout est téléchargé, mais avec les serveurs, une partie du travail (à l'intérieur de certains délimiteurs) se le serveur et revient injecté dans le html sous une forme différente (un peu comme l'envoi de données à une fonction en C++ et des données différentes retournées), qui est ensuite redirigé localement vers la page.
Votre navigateur Web demande à votre système d'exploitation de résoudre le nom d'hôte localhost
. Les systèmes d'exploitation résolvent normalement le nom d'hôte localhost
en 127.0.0.1
, votre interface de bouclage.
Tout nom d'hôte ou adresse IP suivi d'un :
et un numéro de port comme :8080
indique au navigateur de se connecter à ce port TCP au lieu du port 80 par défaut du serveur Web.
Tout comme http://localhost:80/
, http://localhost/
, http://127.0.0.1/:80
, et http://127.0.0.1/
chacun se connecte au même serveur et port, de même que http://localhost:8080/
et http://127.0.0.1:8080/
se connecte également à la même adresse IP mais sur TCP port 8080
Remarque supplémentaire: Dans HTTP/1.1, même si le navigateur Web se connecte à la même adresse IP et au même port, à de nombreux serveurs Web, il existe une légère différence entre localhost et 127.0.0.1. Selon le contenu de la barre d'adresse, votre navigateur enverra un champ d'en-tête de demande avec Host: localhost
ou Host: 127.0.0.1
dedans. Lorsqu'un serveur Web est correctement configuré, le champ d'en-tête Hôte du navigateur permet à un seul serveur Web d'écouter sur un seul port d'adresse IP et de servir différentes pages Web pour de nombreux domaines différents qui se résolvent à la même adresse IP.
Sur les systèmes Unix ou Unix comme OS tels que Linux ou Freebsd, le fichier est/etc/hosts, et est susceptible d'avoir des lignes comme:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
Sous Windows, le fichier est c:\windows\system32\drivers\etc\hosts
et aura généralement une ligne similaire:
127.0.0.1 localhost
Remarque supplémentaire: Si vous le souhaitez, vous pouvez ajouter des lignes à votre fichier d'hôtes comme:
127.0.0.1 localhost
127.0.0.1 developer.yourdomain.com
# Deny Browser Request For These Sites
127.0.0.2 www.spam.advertisements.com
127.0.0.2 super.ads.com
# Block These Sites
127.0.0.3 www.dont.go.here.com
127.0.0.3 nsfw.stuff.com
Le localisateur de ressources uniforme (URL) http://developer.yourdomain.com:8080/
dans la barre d'adresse de votre navigateur, demande au navigateur Web d'établir une connexion TCP au port 8080 de votre adresse de bouclage locale 127.0.0.1.
De plus, selon rfc1700 page 4 toute adresse de la plage 127.0.0.0/8 est également une adresse de bouclage. Ainsi, un serveur Web correctement configuré fonctionnant sur votre ordinateur pourrait refuser toute demande sur le port 127.0.0.2 tout en donnant un message générique "Vous ne devriez pas aller ici. Le site est bloqué" pour les connexions sur 127.0.0.3.
Apache Tomcat est un serveur qui écoute sur un port et exécute Java programmes qui génèrent du contenu à envoyer à votre navigateur.
Lorsque vous tapez www.google.com dans votre navigateur Web, il ouvre une connexion sur le port par défaut 80 au serveur Google (via une recherche DNS pour voir quelle adresse IP www.google.com est) et demande la page Web. Le serveur Google répond par une page Web que votre navigateur dessine à l'écran (généralement en effectuant d'autres appels à des images, CSS et JavaScript).
Lorsque vous allez sur localhost: 8080, c'est exactement la même chose. Le nom du serveur Localhost résout toujours la machine sur laquelle vous exécutez et utilise la fausse adresse IP de 127.0.0.1 (votre ordinateur aura deux adresses IP - cette fausse que chaque ordinateur possède et la vraie). Vous devez donc disposer d'une instance Tomcat exécutée localement pour écouter les connexions sur le port 8080.
Pourquoi le port 8080 plutôt que le port http par défaut 80? Eh bien, c'est dans le cas où vous avez déjà un serveur Web en place.
En règle générale, vous disposez de serveurs Web et de serveurs d'applications.
Les serveurs Web (comme Apache httpd) fournissent des pages statiques. En fait, c'est comme un serveur FTP unidirectionnel sophistiqué. Vous ouvrez une connexion TCP et demandez un fichier à l'aide des commandes HTTP (généralement GET). Le serveur Web renvoie un fichier HTML et votre navigateur le télécharge et l'analyse, voit qu'il a besoin d'autres images et en demande. Un serveur Web est très rapide mais soulève essentiellement les fichiers du disque local et les renvoie.
Un serveur d'applications (comme Tomcat ou JBoss) est similaire, sauf qu'il exécute généralement du code pour "créer" la page que vous demandez, plutôt que de la soulever directement du disque. La création de cette page dépend de votre application. Il peut se connecter à une base de données, exécuter un programme, servir une page au hasard ... Etc. Lorsque vous vous connectez à votre banque en ligne par exemple, le serveur d'application établit une session pour vous, renvoie cet identifiant de session dans un cookie que votre le navigateur renvoie à chaque fois que vous faites une demande jusqu'à ce que vous vous déconnectiez. Donc, si vous demandez la page "mes soldes", la banque recherche qui vous êtes en fonction de votre identifiant de session, puis va dans sa base de données pour obtenir votre nom et votre solde bancaire, puis crée une page disant "Salut John Smith, votre solde est de 100 €. " Les serveurs d'applications sont généralement plus lents, mais plus polyvalents que les serveurs Web.
De nombreux endroits ont un WebServer fonctionnant dans le port par défaut de 80, puis AppServer fonctionnant sur un port secondaire (comme 8080). Ainsi, les pages statiques sont servies rapidement et lorsque les utilisateurs cliquent sur un lien qui les mène à une page dynamique, le lien va au 8080 (auquel le serveur d'applications répond) ou le serveur Web est configuré pour transmettre certaines demandes au serveur d'applications (dans auquel cas il ressemble toujours au port par défaut 80 et semble donc un peu plus agréable à l'utilisateur).
Bien sûr, c'est un aperçu de très haut niveau et rien n'est aussi noir et blanc. La plupart des serveurs Web peuvent créer du contenu dynamique en exécutant des scripts (généralement CGI via des scripts she'll utilisant Perl ou PHP) et la plupart des serveurs d'applications peuvent également servir des fichiers simples comme un serveur Web. En fait, il est possible d'exécuter simplement un serveur d'applications et de changer le numéro de port Tomcat de 8080 à 80.
Enfin, de nombreuses applications s'éloignent de la diffusion de pages HTML complètes pour chaque demande au serveur d'application (ce qui est considéré comme lent et inefficace) et répondent à la place avec uniquement les extraits de données en utilisant AJAX pour envoyer du JSON ou du XML. Retour à l'original www.google.com que vous avez utilisé pour taper votre requête de recherche, appuyez sur Rechercher et obtenez une page de vos résultats. Maintenant, à la place, au fur et à mesure que vous tapez, votre navigateur envoie continuellement AJAX demandes à Google qui répond avec des résultats de recherche à jour en fonction de ce que vous avez tapé jusqu'à présent, puis votre navigateur met à jour la page. Cela signifie qu'il n'est pas nécessaire d'attendre que l'utilisateur soumette la page de manière plus rapide et plus dynamique pour l'utilisateur (comme le serait une application de bureau à l'ancienne).
Dans ce scénario, vous envoyez une demande de résolution de localhost qui est 127.0.0.1 (interface de bouclage) et Apache est configuré pour écouter sur le port 8080, lorsque vous accédez à localhost sur le port 8080, il renvoie le VirtualHost par défaut.
Pour faire simple, localhost en tant qu'adresse Web se connecte à votre machine locale, où dans ce cas vous avez installé Apache comme serveur Web.
La deuxième partie,: 8080, signifie se connecter au port 8080 de cette adresse Web. Si vous ne le spécifiez pas, votre navigateur Web se connectera au port de serveur Web par défaut, qui est le port 80.
Si vous utilisez encore des adresses IP, localhost est un lien DNS fixe vers 127.0.0.1.
Devrait vous y rendre ...