====== Cours : Les sites Web dynamiques ======
===== Architecture d'un service Web =====
Un site Web accessible sur Internet ou un réseau local est conçu selon une **architecture Client-serveur** :
* le **serveur** héberge les pages Web ;
* le **client** est le **navigateur** sur mon ordinateur qui me permet de **visualiser** les pages Web.
Le rapport de [[https://news.netcraft.com/archives/category/web-server-survey/| novembre 2019 de Websurvey]] indique :
* l'existence de plus de 1,3 milliard de sites Web sur Internet,
* Le serveur le plus utilisé est **nginx** (33%), suivi de **Apache**(27%), projet de la fondation éponyme puis **Microsoft IIS** (15%) de Microsoft.
{{ :isn:client-serveur_2.png |}}
**Explications : **
* le **serveur Web** est un ordinateur qui héberge l'application Web. Dans ce tutoriel, le serveur sera **hébergé** sur mon ordinateur et créé avec le module **Flask** pour le langage **python**. Le serveur Web utile le **protocole HTTP** (Hypertext Transfer Protocol )
* le client est le **navigateur** comme Microsoft **Edje**, Mozilla **Firefox**, **Chrome** ou **Opéra**.
Fichier du schéma pour https://www.draw.io/ : {{:isn:client-serveur_2.xml|}}
===== Principe de la communication entre serveur Web et client=====
==== La requête ====
* le navigateur **demande une page Web** : c'est une **requête** qui contient :
* le **chemin** vers la page, l'URL ;
* le **type** de requête ; les deux principaux requêtes que je vais utiliser sont **GET** et **POST** ;
* des **informations** sur son navigateur ;
* éventuellement des **données**.
=== Analyse d'une requête ===
Voici comme exemple d'URL, l'adresse vers la carte des formations de l'Académie de Limoges : \\ **%%http://www.ac-limoges.fr/cid137384/carte-des-formations.html%%** :
* **%%html://%%** -> précise le protocole utilisé ;
* **%%www.ac-limoges.fr%%** -> est le nom DNS du serveur web de l'Académie de Limoges;
* **ac-limoges.fr** -> est le nom de domaine qui gère référence le serveur ;
* **/cid137384/carte-des-formations.html** est le chemin d'accès à la page. Dans ce tutoriel ce sera appelé **la route** ;
* **carte-des-formations.html** est la page web demandée.
==== La réponse ====
* après la réception de la requête, le serveur envoie sa **réponse** :
* la **page** demandée ;
* son **type** (mimetype) ;
* un **code d'erreur** qui peut être ;
* **code 404** : page **non trouvée** ;
* **code 200** : **tout s'est bien passé** ;
* **code 500 et 503** : erreur serveur ;
* autres **codes d'erreu**r possibles : https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP
{{ :isn:client-serveur_3.png |}}
==== Les ports réseaux ====
Dans ce tutoriel, le serveur sera accessible à l'adresse **%%http://127.0.0.1:5000%%** car le **serveur HTTP** de Fask fonctionne sur le **port 5000**, si le serveur est créé sur votre ordinateur.
Quand on navigue sur Internet, on ne précise pas de numéro de ports. Votre navigateur va alors **automatiquement** préciser le **port 80** qui est le **port par défaut** des **serveurs Web**.
L'URL de la carte des formations de l'Académie peut donc aussi s'écrire : \\
**%%http://www.ac-limoges.fr:80/cid137384/carte-des-formations.html%%** :
Quand le **serveur HTTP intégré à Flask** sert au **développement** de son site Web, il **utilise par défaut** le port 5000 afin que le site ne soit **pas accessible au reste du réseau**, si on ne connait le port réseau ! Ce **numéro de port** pourra ensuit **être changé**.
==== Activité Les langages pour créer des sites Web ... ====
* [[isn:langageweb|Les langages pour créer des sites Web]]