INTERACTIONS HOMME- MACHINE SUR LE WEB
CHAPITRE 4 : LE MODÈLE CLIENT/SERVEUR
LE PROTOCOLE HTTP
Le modèle client/serveur
Le modèle client/serveur est assez simple mais présente cependant quelques subtilités que nous allons découvrir dans ce chapitre.
Distinguons dans un premier temps qui est client et qui est serveur.
Lorsqu'un ordinateur A veut échanger des données avec un ordinateur B, l'ordinateur A va demander des fichiers (texte, photos, vidéos…) à l'ordinateur B.
Dans ce cas l'ordinateur A est le client (il demande des
ressources), l'ordinateur B (qui fournit les ressources) est le
serveur.
Le modèle client/serveur
L'exemple classique est lorsque l'on effectue une navigation sur internet.
Notre navigateur web (donc nous sommes client) demande (on dit qu'il effectue une "requête") le contenu d'une page web stockée sur un
Le modèle client/serveur
Dans le cas d'une consultation de page web, le serveur enverra l'ensemble des données qui accompagne le lecture correcte de la page: fichiers css, images, fichiers javascript…
Le modèle client/serveur
Si toutes les ressources nécessaires sont présentes sur un seul serveur, on parle d’architecture à deux niveaux ou 2 tiers (1 client + 1 serveur).
Si certaines ressources sont présentes sur un deuxième serveur (par
exemple des bases de données), on parle d’architecture à trois niveaux ou 3 tiers (1 client interroge le premier serveur qui lui-même interroge le deuxième serveur).
Au-delà on parle d'architecture N-tiers
Le modèle client/serveur
Dans certains cas, l'ordinateur peut à la fois jouer le rôle de client et de serveur, c'est le cas lorsque vous effectuez du peer-to-peer
Rq. Même si nous ne le verrons pas ici, il est possible de transformer votre ordinateur en serveur web afin d'héberger votre site web et de le mettre à disposition d'autres utilisateurs (clients).
Le modèle client/serveur
Aucun serveur, même extrêmement performant, ne serait capable de répondre à toutes ces requêtes. Google, Amazon ou encore Facebook possèdent un très grand nombre de serveurs afin de pouvoir satisfaire les demandes des utilisateurs en permanence.
Revenons sur une architecture classique.
Afin assurer une continuité de service, dans les sociétés, plusieurs serveurs assurent
exactement le même rôle (on parle de redondance). Vous vous doutez bien que Google ne possède pas qu'un seul serveur, en effet, en moyenne, chaque seconde, c'est environ 65000 clients qui se
connectent aux serveurs du moteur de recherche de Google
8
Le modèle client/serveur
Pour répondre à ce nombre de requêtes importantes, les serveurs sont concentrés dans un datacenter (qui sont des
bâtiments très sécurisés).
Chaque armoire sur l'image ci-contre (qu'on appelle une baie) contient des centaines de serveur entassés les uns sur les autres.
Ces serveurs sont des machines plates ce qui facilite leur entassement. Il n'y a pas d'écran car on ne les utilise pas
directement. Ils se contentent de
transmettre le contenue des sites web sur le réseau.
Le modèle client/serveur
Actuellement les serveurs peuvent générer du code HTML. Ainsi le code HTML envoyé aux clients dépendra des actions du client lui-même. On parle de page web dynamique.
Souvent les serveurs sont spécialisés dans certaines tâches, par exemple, les serveurs qui envoient aux clients des pages HTML sont appelés "serveur web".
Il en existe pour gérer des fichiers : serveur de fichier, pour permettre l'impression de document : serveur d'impression, pour gérer les emails : serveur de
messagerie…
Pour cela, il existe des langages de programmation mais qui s'exécute
"coté serveur" afin de générer du contenu HTML. Le plus utilisé se nomme
Le protocole HTTP
Les robots des moteurs de recherche (ex Googlebot) qui explorent les sites internet utilisent également le protocole HTTP pour communiquer avec les serveur web.
Le protocole HTTP (acronyme de Hypertext Transfer Protocol) est le protocole
réseau utilisé par les navigateurs Web (Firefox, Internet Explorer...) et les serveurs Web (Apache, IIS...) pour communiquer entre eux.
C'est lui qui est utilisé par exemple pour obtenir un fichier HTML, une image, poster un formulaire Internet. Il est donc au cœur de l'Internet.
Techniquement c'est un protocole texte (donc lisible en clair) s'appuyant les protocoles plus bas-niveau TCP et IP (cf. partie réseau)
Le protocole HTTP
Avec le protocole HTTP la communication entre un navigateur et un serveur Web est finalement assez simple.
En voici le déroulé :
• une URL telle que
http://www.monsite.com/fichier.html est donnée au navigateur par un internaute
• le navigateur en extrait le nom de domaine 'www.monsite.com' et à partir de cette information sait comment trouver le serveur Web distant (grâce à une opération dite de DNS qui transforme un nom de domaine en une
adresse IP)
• à partir de là une connexion (basée sur les protocoles TCP/IP) est établie entre le navigateur et le serveur Web distant
• une requête HTTP demandant la ressource '/fichier.html' est alors transmise par le navigateur
• le serveur Web trouve la ressource correspondante et en renvoie le contenu
En-tête HTTP d'une requête
La première ligne contient toujours :
le type de requête, la partie chemin de l'URL de la ressource cible et enfin la version du protocole (1.0 ou 1.1 généralement).
Les 2 types de requête les plus connus sont :
• GET : c'est pour 'obtenir' une ressource. C'est bien entendu la requête la plus utilisée sur Internet.
• POST : c'est pour envoyer le contenu d'un formulaire. Donc plutôt utilisé pour soumettre des données en vue d'un traitement (côté serveur)
Les [CRLF] symbolisent une séquence ASCII [10-13], appelée [Carriage Return - Line feed]. C'est en fait le délimiteur utilisé par le protocole HTTP pour séparer les lignes de l'en-tête.
Les lignes suivantes sont des champs HTTP, toujours formatées de cette
GET /fichier.html HTTP/1.1[CRLF]
Host: www.monsite.com[CRLF]
User-Agent: Mozilla/5.0 Safari/531.9[CRLF] [CRLF]
Voici un exemple d'entête de requête envoyé par un navigateur
En-tête HTTP d'une réponse
La première ligne de la réponse contient toujours le 'code' HTTP indiquant si la requête a réussi ou pas. (ici 200)
Puis, comme pour la réponse, on trouve les lignes des champs HTTP.
la ligne Server indique le type de serveur qui a fourni la réponse (le plus souvent Apache..(installé sur près de la moitié des serveurs mondiaux)
HTTP/1.1 200 OK[CRLF]
Date: Thu, 24 Sep 2009 19:37:34 GMT[CRLF]
Server: Apache/2.2.3[CRLF]
Content-Length: 7234[CRLF]
Content-Type: text/html; charset=UTF-8[CRLF]
[CRLF]
[ici se trouve le corps de la réponse : la page HTML]
Voici un exemple d'entête de réponse envoyé par un serveur web tel que Apache
En-tête HTTP d'une réponse
Ouvrez l'invite de commande de votre ordinateur (taper invite de commande dans cortina sous windows, sous linux c'est le terminal)
Les invites de commandes suivantes nécessitent évidemment que vous soyez connecté à internet.
Explorons un peu quelques codes HTTP.
Taper : curl http://google.com --head
Quel est le code http de réponse et que signifie-t-il ?
Le code 301 signifie que la page google.com est redirigée de manière permanente. Elle existe donc mais pas à cette adresse.
Taper : curl http://www.google.com --head
Quel est le code http de réponse et que signifie-t-il ?
Le code 200 signifie que la page www.google.com existe bien.
En-tête HTTP d'une réponse
Taper : curl https://isnfeuillade.000webhostapp.com/index2.php --head Quel est le code http de réponse et que signifie-t-il ?
Le code 404 signifie que la page demandée n'existe pas
Il en existe d'autres comme le code 403 qui interdit l'accès à une URL sécurisée (cette URL attend un login et un mot de passe). le code 500 qui signifie que le serveur web n'a pas été capable de traiter la requête (en général c'est un problème plutôt sérieux)
En-tête HTTP d'une réponse
Essayez de comprendre les informations reçues dans la réponse.
Taper : curl http://www.google.com --head -v
Content-Type
le serveur Web indique le type ('MIME type') de la
ressource qu'il renvoie (image, html, pdf...). Il peut même indiquer parfois l'encodage des caractères du contenu.
Par exemple: text/html; charset=UTF-8
Server le serveur Web indique sa signature dans ce champ.
Set-Cookie
le serveur Web (souvent guidé par les lignes de code du développeur d'un site Web) peut indiquer au navigateur des valeurs de cookies. Ces valeurs seront renvoyés par le navigateur dans les requêtes futures.
Location c'est le champ utilisé lors des redirections pour indiquer la nouvelle URL cible
ET le HTTPS ?
Le HTTPS est la version sécurisée du protocole HTTP.
Cela signifie que les données sont chiffrées avant d'être transmises sur le réseau.
Concrètement cela signifie que même si un hacker arrive à intercepter les données transmises, elles seront illisibles et donc inexploitables car cryptées.
Comment se déroule une communication client-serveur utilisant le protocole HTTPS ?
Dans un premier temps, le client envoie une requête de connexion sécurisée au serveur (https au lieu de http)
Dans un second temps, le serveur établit la connexion mais il fournit au client un certificat prouvant son identité. Ce certificat d'identité est en général fournit au client par l'organisme permettant la connexion (comme une banque, ou les
impôts…)
A partir de ce moment là, les échanges client-serveur seront chiffrés grâce à un système de clé publique et clé privée (cf. cours de l'an prochain).
Lorsque vous connectez à un site "sensible" pour lequel il est nécessaire d'entrer un