C’est quoi un serveur http ?

Principe global du http

Pour commencer, regardons un peu comment se passe le surf sur Internet.

Pour surfer sur le web, vous utilisez un navigateur Internet. En fonction de vos clicks ou de vos saisies, celui-ci va appeler des pages contenues sur des serveurs, les récupérer et les afficher.

Voici tout cela résumé par un petit schéma :

http

Comme vous pouvez le constater, c’est très simple. Sur le schéma, et pour simplifier, j’ai représenté 2 étapes. Le navigateur demande la page puis la récupère. (je le répète, c’est simplifié, mais le principe est là)

Le serveur attend les connexions et les demandes, il se contente de répondre à la demande en envoyant du contenu. (nous verrons un peu plus loin, qu’il peut également en recevoir).

 

Rappel sur les protocoles et services

Avant de continuer et de regarder en détail le fonctionnement , commençons par un petit rappel. Pour vous connecter à un serveur, vous utilisez un ou plusieurs port (porte d’entrée) et un protocole (langage utilisé). (enfin quand je dis vous, vous ne le faites pas directement, mais c’est le logiciel que vous utilisez qui le fait)

La notion d’URI et d’URL.

En général, le surf commence par une adresse, que vous l’ayez saisie directement, ou quelle soit le résultat d’un moteur de recherche (qui d’ailleurs est lui aussi lancé par une adresse comme par exemple http://www.google.fr), il vous faut toujours une adresse pour aller quelque part. Pour atteindre un serveur http, c’est pareil : on utilise une adresse.

Une adresse Internet est toujours constituée de la façon suivante :

protocole://adresse-du-serveur:port/chemin/ressource

(il faut noter que le port, le chemin et la ressource peuvent alors être omis, alors ce sont les valeurs par défaut qui seront utilisées).

Examinons un peu plus l’adresse qui est affichée actuellement dans votre navigateur :
http://www.mathartung.xyz/siteICN/reseau_a4.html

(attention, certains navigateurs n’affichent pas http://, ils considèrent que http étant la norme par défaut, il n’est pas nécessaire de l’afficher, mais il est bien là croyez-moi)

Cette adresse est appelée URL (Uniform Resource Locator : On pourra traduire cela par un moyen universel de localiser une ressource.). Souvenez-vous simplement qu’une URL est une adresse.

Cette URL désigne et contient plusieurs informations :

Et si on parle de la ressource à récupérer ou à accéder, on va parler de URI (Uniform Resource Identifier)

Vous avez remarqué que je n’ai pas parlé du port, j’y reviens plus loin.

Définition du http

http : est l’abréviation de HyperText Transfer Protocol. Donc, en clair un protocole de transfert d’hypertext ! Je ne suis pas sûr qu’avec la traduction ce soit beaucoup plus clair, sauf que l’on croit comprendre que ça sert à transférer de l’HyperText. Mais c’est quoi de l’hypertext ?


Hypertext : un hypertexte est un texte contenant des liens qui permettent d’accéder directement à d’autres ressources (documents, images, …). Si on regarde bien, les pages qui sont affichées dans votre navigateur sont de l’hypertexte car elles contiennent des liens (vers des URL).

Définition sur le site de l'éducation nationale

hypertexte n. m.
Domaine : Informatique/Internet.
Définition : Système de renvois permettant de passer directement d’une partie d’un document à une autre, ou d’un document à d’autres documents choisis comme pertinents par l’auteur.
Équivalent étranger : hypertext.

Port utilisé en http

Je vous l’ai rappelé au-dessus : qui dit protocole dit port. Le port par défaut pour accéder à un serveur http, le port est le 80. Mais, les navigateurs sont capables de dialoguer avec un serveur http sur des ports différents (à condition bien sûr de leur dire et que le serveur attende de dialoguer sur un autre port).

Cette technique avec des ports différents est utilisée pour atteindre les serveurs de manière différente :

  1. Avec le port par défaut, vous consultez les pages mises à disposition par le serveur.
  2. Avec un port différent, vous accédez à d’autres pages, non accessibles directement comme des pages d’administration du serveur par exemple.
  3. Mais il est également possible d’avoir plusieurs sites différents sur le même serveur. L’accès à l’un ou l’autre des sites se fera en fonction du port adressé.

Voici les 2 exemples ci-dessous, pour voir comment atteindre le serveur avec différents port et toujours en http :

  1. cas standard : port utilisé 80 (rien n’est spécifié sur la barre d’adresse)
  2. Port spécifique :

    Pour utiliser un port spécifique, il suffit d’ajouter le numéro du port derrière l’adresse du serveur (en ajoutant les « : »). Le port doit se mettre en l’adresse du serveur, et les ressources demandées.

    Exemple :

    • dans l’exemple ci-dessous, j’indique au navigateur d’utiliser le port 8080.
    • http://serveur:8080

    Pour avoir une réponse il faut avoir un serveur sur le port 8080...

Le protocole http.

Préambule

Ce protocole comme beaucoup de protocoles de l’Internet fonctionne en mode texte. Les commandes échangées entre le client et le serveur http sont envoyées en texte non crypté. (dans l’article sur la différence entre le http et le https, nous verrons qu’il est parfois nécessaire de crypter certaines informations).

Et enfin, un client de serveur http est le plus souvent un navigateur Internet. Actuellement, pour lire cette page, vous utilisez un navigateur tel que : Internet Explorer, Opera, Chrome, Firefox, … n’est-ce pas ?

Réception du contenu

La plupart du temps, le contenu demandé est une page, affichée ensuite par le navigateur. Mais nous l’avons vu dans l’article précédent, il est possible de demander différents contenus aux serveurs.

Voici comment cela se passe : (c’est le même schéma que sur la 1ère page de cette série d’article, mais nous allons examiner cela en détail)

http

Attention : ce schéma est volontairement simplifié, il manque la partie connexion et déconnexion au serveur. Vous retrouverez le schéma complet plus bas. Nous allons rester volontairement sur ce schéma pour l’instant car il facilite la compréhension et nous permet de nous concentrer sur le protocole http (ou https).

Comme dans toute communication, il faut parler le même langage. Le protocole (langage) pour dialoguer avec le serveur web est « http ».

La méthode GET

Et comme dans tous langages, les actions/commandes se font à partir de verbes. Le navigateur va demander le contenu au serveur à l’aide de la commande : « GET » ( Le verbe « to Get » en anglais se traduit par « obtenir », « avoir », « se procurer » : On pourrait donc traduire « GET » par « Obtiens » ou « Récupère » ).
Ces commandes sont appelées des « Méthodes« .

La méthode Get va envoyer différentes informations au serveur pour que celui-ci puisse lui renvoyer le contenu demandé.
Voici les informations que la méthode Get envoie au serveur :

Et comme je vous le disais au dessus, toutes ces informations sont envoyées en texte. Chaque information est envoyée sur une ligne séparée.

Un exemple pour comprendre

Regardons les étapes lorsque je me connecte au site « www.mathartung.xyz » et que je demande la page « reseau_a4.html»

 

J’ai mis la partie connexion/déconnexion au serveur en italique car nous en reparlerons plus bas : restons concentré sur la partie http.

  1. Le navigateur se connecte au serveur.
  2. Le navigateur envoie la méthode GET au serveur (en passant éventuellement des paramètres que examinerons plus loin)
  3. Le serveur trouve la page demandée et la renvoie vers le navigateur.
  4. La navigateur affiche la page récupérée.
  5. Fermeture éventuelle de la connexion.

Et dans le détail, voila ce que ça donne :

  1. Le navigateur se connecte à https://www.mathartung.xyz
  2. Le navigateur envoie la méthode : GET /siteICN/reseau_a4.html (la méthode GET suivi de la page à récupérer, ici : /siteICN/reseau_a4.html)
  3. Le serveur envoie la réponse et le navigateur récupère les données et affiche la page.
  4. Fermeture (ou pas) de la connexion.

Et voila, c’est aussi simple que ça.

L’envoi de données.

Nous venons de voir le principe de fonctionnement pour des pages qui ne changent pas comme des articles, mais que se passe-t-il quand l’utilisateur doit envoyer des données et quand les pages doivent changer en fonction des données envoyées ?

Prenons un exemple, vous êtes sur un site et vous ne trouvez pas ce qui vous intéresse. Ce site a une zone de « recherche », vous allez alors saisir du texte dans cette zone. Il est facile de comprendre que la page de résultat qui va s’afficher sera en fonction de ce que vous avez saisi. Alors on peut se poser la question : « Mais comment la page de résultat est arrivée sur mon ordinateur ? »

Cela va se passer en 2 temps :

  1. le navigateur va envoyer au serveur, les valeurs que vous avez saisies pour la recherche
  2. le serveur va récupérer ces valeurs, effectuer la recherche dans ses bases de données et renvoyer la page avec les résultats.

Voici ce qu'affiche google quand je lui demande de chercher mathartung :

Ce que l’on peut constater dans cet exemple c’est que les URL des pages demandées sont toutes complexes. Elles contiennent des symboles : « ? » et « & »

On pourrait simplifier cela et l’afficher comme ça :

www.site-internet.net/page ? parametre1=valeur1 & parametre2=valeur2
(Attention, j’ai ajouté des espaces pour faciliter la lecture, mais il n’y en a pas)

Notez, que chaque développeur de site choisit les noms de ses paramètres. Comme par exemple, les paramètres de valeur de recherche ne sont pas les mêmes sur le site culture-informatique : « s », que sur le site asus.com : « SearchKey »)

N’hésitez pas à essayer la recherche sur ce site pour voir comment se comporte l’URL. Vous trouverez la recherche à droite, un peu haut dessus de ce texte.

La méthode POST

La méthode GET est utilisée dans les envois de données simples, mais il peut être nécessaire d’envoyer :

Un exemple

Prenons un exemple, vous voulez faire imprimer une photo. Vous allez sur un site Internet proposant ce service, et vous devez envoyer votre photo au site. Vous comprenez facilement que la photo ne peut pas être envoyée avec la méthode GET et un paramètre du style :

www.sitephoto.com/?photo=11d0e8de4507fd0adf08415dfabb960fd00f0df….

Une photo faisant généralement plusieurs Mo (millions de caractères), ce n’est pas possible de mettre tout ça dans une URL car la longueur maximum des paramètres des URL est limitée à 256 caractères et la globalité de l’ URL est limitée à 2048 caractères.

Dans ce cas, il est possible d’utiliser une autre méthode proposée par le protocole http, la méthode POST.

La méthode POST va permettre d’envoyer des données comme si vous envoyez un mail avec un pièce jointe.

La méthode POST va utiliser le codage MIME pour indiquer de quel type de données il s’agit.

Pour rester simple, le format MIME permet de coder n’importe quel type de données sous forme de texte pour permettre de les envoyer. MIME veut dire Multipurpose Internet Mail Extension. C’est un format qui permet l’envoi par mail de pièces jointes de n’importe quel type.

Voici quelques exemples de description de format MIME :

Données

Format Mime

Un fichier image

Content-Type: image/jpeg;

Un fichier texte

Content-Type: text/plain;

Un fichier de données brutes

Content-Type: application/octet-stream;

On pourrait se dire : « mais à mon niveau, je m’en fous qu’un site utilise l’une ou l’autre de ces méthodes ! ». Oui, c’est vrai.

Mais, ces 2 méthodes ne se comportent pas exactement pareil, comme par exemple au niveau du cache. Si vous faites « précédent » sur une page utilisant la méthode GET, cela fonctionne sans problème. Par contre, si vous faites « précédent » sur une page utilisant la méthode POST, vous aurez un message d’erreur du navigateur, tel que:

erreur cache
avec Google Chrome
erreur cache2avec Mozilla Firefox

On pourrait se poser la question « mais pourquoi cela fonctionne avec GET, et pourquoi ça ne fonctionne pas avec POST ? ».

Il faut juste comprendre qu’avec POST, les données n’étant pas dans l’URL, il n’est pas possible de se repositionner précisément à un endroit précis. (Avec GET, comme on repasse exactement tous les paramètres dans l’URL, on repasse non seulement la page, mais aussi tout le contexte).

C’est une des différences notoire entre les sites utilisant GET et ceux utilisant POST, mais vous verrez qu’il en existe bien d’autres.

Les différences entre GET et POST

Nous l’avons vu dans l’article précédent, les méthodes GET et POST ne se comportent pas tout à fait pareil. Cela peut avoir une incidence sur notre navigation. Regardez bien le tableau ci-dessous, et je pense que vous comprendrez mieux le comportement de votre navigateur Internet sur certaines pages :

Action dans le navigateur Méthode GET Méthode POST
Click sur bouton « Précédent » Fonctionne Les données vont être renvoyées. Le navigateur va afficher un message d’alerte. (Essayez de faire « Précédent » sur le site de votre banque par exemple)
Click sur bouton « Actualiser la page » Fonctionne Les données vont être renvoyées. Le navigateur va afficher un message d’alerte
Visibilité Les données sont affichées dans la barre d’adresse du navigateur et visible par tout le monde. Rien n’est affiché.
Historique Les pages vues et les paramètres sont conservés entièrement dans l’historique. Seules les pages vues sont conservées. (pas les paramètres)
Cache Les pages et paramètres peuvent être mis en cache pour accélérer les futurs affichages. Pas de cache possible.
Marques-pages Il est possible de marquer la page, elle sera affichée complètement avec les paramètres. Seule la page sera affichée, mais les paramètres seront perdus.
Limitation dans les tailles d’envois Oui, la longueur est limitée à la longueur des URL : 2048 caractères max. Pas de limitation
Limitations dans les données envoyées Oui, il n’est possible d’envoyer que des données en format texte Pas de limitation, tous les types de données peuvent être envoyées.
Sécurité

Moins sécurisé que POST car les données sont visibles dans l’URL.

Ne jamais utiliser GET pour envoyer des identifiants et mot de passe. (imaginez que l’on puisse voir votre mot de passe dans la barre d’adresse)

Un peu plus sécurisé car les données ne sont pas visibles directement.

Les réponses du serveur

Le serveur répond aux demandes et si tout va bien, il envoie la ressource demandée. Mais il va également va envoyer code de réponse : 200 qui veut dire OK. C’est le cas le plus fréquent : tout va bien !

Vous pouvez retrouver la liste des erreurs http : http://www.w3.org/Protocols/HTTP/HTRESP.html

La fameuse erreur 404 !

Mais il se peut que la ressource demandée ne puisse pas être envoyée et le plus souvent parce qu’elle n’existe pas. (Si elle n’existe pas, c’est peut-être qu’il y a une erreur dans la demande ou que la page a été supprimée).

Lorsque le serveur ne trouve pas la ressource demandée, il va envoyer la célèbre erreur : « 404 : page introuvable ». Je tenais à en parler car dans si vous devez vous occuper d’un site Internet, immanquablement, on vous parlera de l’erreur 404. Cette erreur est très connue, à tel point que :

En voici quelques unes : (ma préférence va aux 2 dernières : web-alliance et staragora.com)

Comment ça marche, et bien lorsque vous demandez une page au serveur et que cette page n’existe pas, il doit renvoyer une erreur 404. Mais, il peut très bien renvoyer une page affichant l’erreur 404 et un message personnalisé.

Vous n’y croyez pas, alors essayez avec un site. (attention, j’ai pris l’exemple avec web-alliance.fr, mais vous pouvez choisir un autre site).

  1. Vous saisissez l’adresse dans la barre de navigation (par exemple : www.web-alliance.fr) et vous faites « Entrée », alors le site s’affiche.
  2. Puis toujours dans la barre de navigation, derrière l’adresse affichée, vous ajoutez : » /n’importe quoi » comme par exemple : www.web-alliance.fr/azerty123 puis vous faites Entrée. Le serveur web-alliance.fr ne trouvant pas la page « azerty123 » va afficher la page erreur « 404 : Page non trouvée »

PS : Cela ne fonctionne pas avec tous les sites.

Serveurs Http

Pour être complet, il faut quand même que je vous donne quelques célèbres de noms de serveurs http. (les 3 premiers dans l’ordre d’utilisation dans le monde)

Les différentes méthodes

Et enfin, juste pour votre culture, mais je ne vais pas m’y attarder car vous pouvez trouver cela sur plein de sites.

Voici la liste des méthodes proposées par le protocole http :

Options Le serveur va renvoyer la liste des options disponibles.
Get Nous l’avons déjà abordé.
Head Le serveur ne renvoie que l’entête des pages, mais pas l’ensemble de la page.
Post Déjà vu au-dessus.
Put C’était un moyen de mettre à jour les pages. Maintenant on utilise plus le FTP, c’est nettement plus simple.
Delete Comme pour la méthode PUT, la méthode Delete est nettement moins utilisée, et là aussi c’est les services FTP qui sont utilisés.
Trace Utilisé pour les tests
Connect Pour accéder via un proxy.

Introduction au https

Juste avant de conclure, je vais commencer à parler du prochain article qui concerne le https.

Je vais vous montrer pourquoi il est important dans certains cas d’utiliser du https et non plus du http.

Tout cela est dû au protocole http. Je vous rappelle que http est un protocole basé sur du texte. Et que tous les échanges entre votre navigateur et le serveur sont du texte facilement lisible par n’importe qui snifferait votre réseau. (je vais vous montrer cela avec un schéma).

C’est pourquoi le https est né : Il fallait crypter les échanges entre les navigateurs et les serveurs, pour éviter que n’importe qui puisse lire des données confidentielles.