Fiche d'exercices : Web et HTTP
📚 Partie 1 : Protocole HTTP et URLs
Introduction 🦊
Exercice 1 - Anatomie d'une URL
Analysez cette URL et identifiez ses composants :
Identifiez :
1. Le protocole
2. Le nom de domaine
3. Le port
4. Le chemin
5. Les paramètres de requête
6. L'ancre (fragment)
https://www.example.com:8080/path/to/page?param1=value1¶m2=value2#section
Identifiez :
1. Le protocole
2. Le nom de domaine
3. Le port
4. Le chemin
5. Les paramètres de requête
6. L'ancre (fragment)
Composants de l'URL :
1. Protocole : https
2. Nom de domaine : www.example.com
3. Port : 8080
4. Chemin : /path/to/page
5. Paramètres : param1=value1¶m2=value2
6. Ancre : section
1. Protocole : https
2. Nom de domaine : www.example.com
3. Port : 8080
4. Chemin : /path/to/page
5. Paramètres : param1=value1¶m2=value2
6. Ancre : section
Introduction 🦊
Exercice 2 - Méthodes HTTP
Associez chaque méthode HTTP à son usage :
Méthodes : GET, POST, PUT, DELETE, HEAD, PATCH
Usages :
1. Récupérer des données sans les modifier
2. Envoyer des données pour créer une ressource
3. Remplacer complètement une ressource
4. Supprimer une ressource
5. Récupérer seulement les en-têtes
6. Modifier partiellement une ressource
Méthodes : GET, POST, PUT, DELETE, HEAD, PATCH
Usages :
1. Récupérer des données sans les modifier
2. Envoyer des données pour créer une ressource
3. Remplacer complètement une ressource
4. Supprimer une ressource
5. Récupérer seulement les en-têtes
6. Modifier partiellement une ressource
Associations :
• GET → 1. Récupérer des données sans les modifier
• POST → 2. Envoyer des données pour créer une ressource
• PUT → 3. Remplacer complètement une ressource
• DELETE → 4. Supprimer une ressource
• HEAD → 5. Récupérer seulement les en-têtes
• PATCH → 6. Modifier partiellement une ressource
• GET → 1. Récupérer des données sans les modifier
• POST → 2. Envoyer des données pour créer une ressource
• PUT → 3. Remplacer complètement une ressource
• DELETE → 4. Supprimer une ressource
• HEAD → 5. Récupérer seulement les en-têtes
• PATCH → 6. Modifier partiellement une ressource
Moyen 🦊🦊
Exercice 3 - Codes de statut HTTP
Expliquez la signification de ces codes de statut :
1. 200
2. 301
3. 404
4. 401
5. 500
6. 403
7. 302
8. 418
1. 200
2. 301
3. 404
4. 401
5. 500
6. 403
7. 302
8. 418
Significations :
1. 200 OK : Requête réussie
2. 301 Moved Permanently : Redirection permanente
3. 404 Not Found : Ressource non trouvée
4. 401 Unauthorized : Authentification requise
5. 500 Internal Server Error : Erreur serveur
6. 403 Forbidden : Accès interdit
7. 302 Found : Redirection temporaire
8. 418 I'm a teapot : Code humoristique (RFC 2324)
1. 200 OK : Requête réussie
2. 301 Moved Permanently : Redirection permanente
3. 404 Not Found : Ressource non trouvée
4. 401 Unauthorized : Authentification requise
5. 500 Internal Server Error : Erreur serveur
6. 403 Forbidden : Accès interdit
7. 302 Found : Redirection temporaire
8. 418 I'm a teapot : Code humoristique (RFC 2324)
Moyen 🦊🦊
Exercice 4 - En-têtes HTTP
Analysez cette requête HTTP et répondez aux questions :
1. Quelle est la méthode utilisée ?
2. Quel type de contenu est accepté ?
3. Comment l'utilisateur s'authentifie-t-il ?
4. Y a-t-il une erreur dans cette requête ?
GET /api/users HTTP/1.1 Host: api.example.com User-Agent: Mozilla/5.0 Accept: application/json Authorization: Bearer abc123 Content-Type: application/json
1. Quelle est la méthode utilisée ?
2. Quel type de contenu est accepté ?
3. Comment l'utilisateur s'authentifie-t-il ?
4. Y a-t-il une erreur dans cette requête ?
Analyse :
1. Méthode : GET
2. Type accepté : application/json
3. Authentification : Bearer token (abc123)
4. Erreur : Content-Type ne devrait pas être présent dans une requête GET (pas de corps)
1. Méthode : GET
2. Type accepté : application/json
3. Authentification : Bearer token (abc123)
4. Erreur : Content-Type ne devrait pas être présent dans une requête GET (pas de corps)
Difficile 🦊🦊🦊
Exercice 5 - Session et cookies
Analysez cet échange HTTP et expliquez le mécanisme :
Requête 1 :
Réponse 1 :
Requête 2 :
1. Que se passe-t-il dans la première requête ?
2. Que fait le serveur avec Set-Cookie ?
3. Pourquoi HttpOnly et Secure sont-ils importants ?
4. Comment le client prouve-t-il son identité dans la requête 2 ?
Requête 1 :
POST /login HTTP/1.1 Content-Type: application/x-www-form-urlencoded username=alice&password=secret
Réponse 1 :
HTTP/1.1 200 OK Set-Cookie: sessionid=xyz789; HttpOnly; Secure Location: /dashboard
Requête 2 :
GET /dashboard HTTP/1.1 Cookie: sessionid=xyz789
1. Que se passe-t-il dans la première requête ?
2. Que fait le serveur avec Set-Cookie ?
3. Pourquoi HttpOnly et Secure sont-ils importants ?
4. Comment le client prouve-t-il son identité dans la requête 2 ?
Analyse du mécanisme :
1. Requête 1 : L'utilisateur envoie ses identifiants de connexion
2. Set-Cookie : Le serveur crée une session et envoie un identifiant de session
3. Sécurité :
• HttpOnly : empêche l'accès JavaScript (protection XSS)
• Secure : transmission uniquement en HTTPS
4. Requête 2 : Le client renvoie automatiquement le cookie pour prouver son identité
1. Requête 1 : L'utilisateur envoie ses identifiants de connexion
2. Set-Cookie : Le serveur crée une session et envoie un identifiant de session
3. Sécurité :
• HttpOnly : empêche l'accès JavaScript (protection XSS)
• Secure : transmission uniquement en HTTPS
4. Requête 2 : Le client renvoie automatiquement le cookie pour prouver son identité
📚 Partie 2 : HTML et CSS
Introduction 🦊
Exercice 6 - Structure HTML
Corrigez ce code HTML qui contient des erreurs :
<html> <head> <title>Ma page </head> <body> <h1>Titre principal</h1> <p>Un paragraphe avec <b>du texte en gras</p> <img src="image.jpg"> <ul> <li>Item 1 <li>Item 2</li> </ul> </body>
Code corrigé :
• Ajout du DOCTYPE
• Fermeture de la balise title
• Fermeture de la balise b
• Fermeture de la balise p
• Ajout de l'attribut alt à img
• Fermeture de la première balise li
• Fermeture de la balise html
<!DOCTYPE html> <html> <head> <title>Ma page</title> </head> <body> <h1>Titre principal</h1> <p>Un paragraphe avec <b>du texte en gras</b></p> <img src="image.jpg" alt="Description"> <ul> <li>Item 1</li> <li>Item 2</li> </ul> </body> </html>Erreurs corrigées :
• Ajout du DOCTYPE
• Fermeture de la balise title
• Fermeture de la balise b
• Fermeture de la balise p
• Ajout de l'attribut alt à img
• Fermeture de la première balise li
• Fermeture de la balise html
Moyen 🦊🦊
Exercice 7 - Sélecteurs CSS
Écrivez les sélecteurs CSS pour :
1. Tous les paragraphes
2. L'élément avec l'id "header"
3. Tous les éléments avec la classe "highlight"
4. Les liens dans les listes
5. Le premier paragraphe de chaque article
6. Les éléments survolés par la souris
1. Tous les paragraphes
2. L'élément avec l'id "header"
3. Tous les éléments avec la classe "highlight"
4. Les liens dans les listes
5. Le premier paragraphe de chaque article
6. Les éléments survolés par la souris
Sélecteurs CSS :
1.
2.
3.
4.
5.
6.
1.
p
2.
#header
3.
.highlight
4.
li a
ou ul a
5.
article p:first-child
6.
:hover
Difficile 🦊🦊🦊
Exercice 8 - Responsive Design
Créez un CSS responsive pour cette structure :
Contraintes :
• Desktop : sidebar 25%, content 75%
• Tablet : sidebar 30%, content 70%
• Mobile : sidebar au-dessus, pleine largeur
<div class="container"> <div class="sidebar">Menu</div> <div class="content">Contenu principal</div> </div>
Contraintes :
• Desktop : sidebar 25%, content 75%
• Tablet : sidebar 30%, content 70%
• Mobile : sidebar au-dessus, pleine largeur
CSS Responsive :
.container { display: flex; } .sidebar { width: 25%; background: #f0f0f0; } .content { width: 75%; padding: 1rem; } /* Tablet */ @media (max-width: 768px) { .sidebar { width: 30%; } .content { width: 70%; } } /* Mobile */ @media (max-width: 480px) { .container { flex-direction: column; } .sidebar, .content { width: 100%; } }
📚 Partie 3 : JavaScript et interactivité
Moyen 🦊🦊
Exercice 9 - Manipulation du DOM
Écrivez le JavaScript pour :
1. Changer le texte d'un élément avec l'id "title"
2. Ajouter la classe "active" à tous les boutons
3. Créer un nouvel élément <p> et l'ajouter au body
4. Supprimer tous les éléments avec la classe "temp"
1. Changer le texte d'un élément avec l'id "title"
2. Ajouter la classe "active" à tous les boutons
3. Créer un nouvel élément <p> et l'ajouter au body
4. Supprimer tous les éléments avec la classe "temp"
Code JavaScript :
// 1. Changer le texte document.getElementById('title').textContent = 'Nouveau titre'; // 2. Ajouter une classe à tous les boutons document.querySelectorAll('button').forEach(btn => { btn.classList.add('active'); }); // 3. Créer et ajouter un paragraphe const p = document.createElement('p'); p.textContent = 'Nouveau paragraphe'; document.body.appendChild(p); // 4. Supprimer les éléments temporaires document.querySelectorAll('.temp').forEach(el => { el.remove(); });
Difficile 🦊🦊🦊
Exercice 10 - Requêtes AJAX
Créez une fonction qui :
1. Fait une requête GET vers "/api/users"
2. Affiche les données dans une liste HTML
3. Gère les erreurs de réseau
4. Affiche un indicateur de chargement
1. Fait une requête GET vers "/api/users"
2. Affiche les données dans une liste HTML
3. Gère les erreurs de réseau
4. Affiche un indicateur de chargement
Fonction AJAX complète :
async function loadUsers() { const loadingEl = document.getElementById('loading'); const usersList = document.getElementById('users-list'); const errorEl = document.getElementById('error'); try { // Afficher le chargement loadingEl.style.display = 'block'; errorEl.style.display = 'none'; // Faire la requête const response = await fetch('/api/users'); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const users = await response.json(); // Afficher les utilisateurs usersList.innerHTML = ''; users.forEach(user => { const li = document.createElement('li'); li.textContent = user.name; usersList.appendChild(li); }); } catch (error) { // Gérer les erreurs errorEl.textContent = 'Erreur: ' + error.message; errorEl.style.display = 'block'; } finally { // Cacher le chargement loadingEl.style.display = 'none'; } }