Collection
Aucun article trouvé dans cette collection.

Python
Web Development
Lancer un serveur http en une ligne de code en Python - Tutoriel pratique
Table of content
1
Comment démarrer http.server depuis la ligne de commande
2
Exécuter un script à distance via l'interface de passerelle commune (cgi)
3
Servir du contenu statique et dynamique par programmation
4
Chiffrer la connexion avec https
5
Générer un certificat auto-signé avec python
6
Considérer les limitations de sécurité et de performance
7
Conclusion
Share with
Dans un monde où la technologie ne cesse d'évoluer, maîtriser les outils de base pour gérer des serveurs web devient essentiel. Que vous soyez un développeur novice ou un professionnel chevronné, comprendre comment démarrer un serveur HTTP directement depuis la ligne de commande peut vous ouvrir de nouvelles perspectives. Cet article vous guide à travers les étapes essentielles pour servir du contenu statique et dynamique, tout en garantissant la sécurité de vos connexions grâce à l'utilisation de HTTPS et de certificats auto-signés. Plongez dans cet univers fascinant où la simplicité rejoint la puissance.
Comment démarrer http.server depuis la ligne de commande
Pour démarrer un serveur HTTP en utilisant Python, la bibliothèque standard offre un module très pratique :
http.server. Ce module permet de lancer un serveur web minimaliste en une seule ligne de commande, ce qui est idéal pour des tests rapides ou le partage temporaire de fichiers sur un réseau local. Voici comment procéder :Vérification de l'installation de Python
Avant de commencer, assurez-vous que Python est installé sur votre machine. Vous pouvez vérifier cela en ouvrant votre terminal et en exécutant la commande suivante :
textile
Si Python est installé, cette commande affichera la version de Python. Si ce n'est pas le cas, vous devez installer Python depuis le site officiel python.org.
Lancer le serveur HTTP
Une fois que vous avez confirmé que Python est installé, naviguez dans le terminal à l'emplacement du répertoire que vous souhaitez partager sur le réseau. Utilisez la commande
cd pour changer de répertoire, comme suit :textile
Une fois dans le bon répertoire, exécutez la commande suivante pour démarrer le serveur HTTP :
textile
Cette commande lance un serveur HTTP sur le port par défaut 8000. Vous verrez alors un message indiquant que le serveur est en cours d'exécution :
python
Accéder au serveur
Pour accéder au serveur depuis un navigateur web, ouvrez votre navigateur préféré et entrez l'adresse suivante dans la barre d'adresse :
python
Cette URL vous permet d'accéder aux fichiers et sous-répertoires du répertoire que vous avez choisi de partager.
Changer le port
Si vous souhaitez utiliser un autre port que 8000, vous pouvez spécifier le port directement dans la commande. Par exemple, pour utiliser le port 8080, tapez :
textile
Sécurité et limites
Notez que
http.server est conçu pour une utilisation en développement ou en réseau local. Il n'est pas sécurisé pour un usage en production, car il ne gère pas les connexions sécurisées (HTTPS) et n'offre pas de protection contre les attaques malveillantes.En suivant ces instructions, vous pouvez rapidement mettre en place un serveur HTTP simple avec Python pour des tests ou le partage de fichiers.
Exécuter un script à distance via l'interface de passerelle commune (cgi)
L'utilisation de l'interface de passerelle commune (CGI) avec le module
http.server de Python permet d'exécuter des scripts à distance. Cela peut être utile pour tester des scripts ou des applications simples. Voici comment configurer et exécuter des scripts CGI.Activer le mode CGI
Pour activer le mode CGI avec
http.server, vous devez démarrer le serveur en utilisant l'option --cgi. Assurez-vous d'être dans le répertoire où se trouvent vos scripts CGI, puis exécutez la commande suivante dans votre terminal :textile
Cette commande initialise le serveur HTTP avec la capacité de traiter les scripts CGI. Par défaut, les scripts CGI doivent être placés dans un sous-répertoire nommé
cgi-bin dans le répertoire courant.Exemple de script CGI
Un script CGI typique en Python commence par la ligne shebang pour indiquer l'interpréteur Python à utiliser. Voici un exemple simple de script CGI :
python
Enregistrez ce script avec une extension
.py dans le répertoire cgi-bin.Permissions du script
Assurez-vous que votre script a les permissions d'exécution adéquates. Vous pouvez modifier les permissions en utilisant la commande
chmod :textile
Accéder et exécuter le script
Pour exécuter le script à partir de votre navigateur, tapez l'URL suivante :
python
Cela déclenche l'exécution du script sur le serveur, et le résultat s'affiche dans le navigateur.
Considérations de sécurité
Bien que l'exécution de scripts CGI soit pratique pour des tests ou des démonstrations, il est important de noter que ce mécanisme peut présenter des vulnérabilités de sécurité. Assurez-vous que le serveur n'est accessible que par des utilisateurs de confiance et que les scripts sont correctement validés pour éviter toute injection de code malveillant.
En utilisant le mode CGI de
http.server, vous pouvez facilement tester et exécuter des scripts Python à distance, avec une configuration minimale.Servir du contenu statique et dynamique par programmation
Servir du contenu statique ou dynamique avec Python peut être réalisé de manière efficace en étendant le module
http.server. Cela permet de créer des applications web simples sans dépendre de frameworks lourds. Voici comment vous pouvez servir les deux types de contenu par programmation.Servir du contenu statique
Le contenu statique, tel que les fichiers HTML, CSS, ou JavaScript, peut être servi directement à l'aide de la classe
SimpleHTTPRequestHandler. Voici comment configurer un serveur pour servir des fichiers statiques :python
Ce script configure un serveur HTTP qui sert le contenu du répertoire courant. Lancez-le et accédez à
http://localhost:8000 pour voir vos fichiers statiques.Servir du contenu dynamique
Pour servir du contenu dynamique, vous pouvez créer une classe personnalisée qui hérite de
BaseHTTPRequestHandler et implémente la méthode do_GET ou do_POST, selon vos besoins.Voici un exemple simple pour servir du contenu dynamique :
python
Ce serveur envoie une simple page HTML dynamique en réponse à chaque requête GET.
Servir du contenu statique et dynamique avec Python est une tâche simple et directe grâce au module
http.server. Cela est particulièrement utile pour des projets de petite envergure ou des démonstrations. Cependant, pour des applications plus complexes ou nécessitant une gestion avancée des requêtes, il est recommandé d'utiliser des frameworks web spécialisés comme Flask ou Django.Chiffrer la connexion avec https
Pour sécuriser les échanges entre le serveur et les clients, il est essentiel de chiffrer la connexion en utilisant HTTPS. Python permet de mettre en place un serveur HTTPS simple en tirant parti de la bibliothèque
ssl pour envelopper le socket du serveur HTTP. Voici comment procéder.Générer un certificat SSL
Avant de commencer, vous devez disposer d'un certificat SSL. Pour un environnement de développement, vous pouvez générer un certificat auto-signé à l'aide de
openssl. Exécutez la commande suivante dans votre terminal :textile
Cela crée deux fichiers :
key.pem (clé privée) et cert.pem (certificat).Configurer le serveur HTTPS
Avec les fichiers de certificat générés, vous pouvez maintenant configurer le serveur HTTP pour utiliser HTTPS. Voici un exemple de configuration :
python
Ce script configure un serveur HTTPS en utilisant le certificat et la clé privée générés précédemment. Le serveur écoute les connexions sécurisées sur le port 4443.
Accéder au serveur sécurisé
Pour accéder au serveur sécurisé, ouvrez votre navigateur et entrez l'URL suivante :
python
Notez que les navigateurs peuvent afficher un avertissement concernant le certificat auto-signé. Ceci est normal pour les certificats qui ne sont pas émis par une autorité de certification reconnue.
Considérations finales
L'utilisation de HTTPS améliore considérablement la sécurité en chiffrant les données échangées. Cependant, pour un déploiement en production, il est crucial d'utiliser un certificat émis par une autorité de certification reconnue pour éviter les avertissements de sécurité dans les navigateurs des utilisateurs.
Générer un certificat auto-signé avec python
Générer un certificat auto-signé est une étape essentielle pour tester HTTPS en développement. Bien qu'OpenSSL soit souvent utilisé pour cette tâche, il est également possible de le faire directement en Python grâce à la bibliothèque
cryptography. Voici comment créer un certificat auto-signé sans quitter l'environnement Python.Installer la bibliothèque cryptography
Avant de commencer, assurez-vous que la bibliothèque
cryptography est installée. Vous pouvez l'ajouter à votre environnement Python avec la commande suivante :textile
Génération du certificat
Avec
cryptography, vous pouvez créer un certificat auto-signé en utilisant le script suivant :python
Ce script génère une clé RSA et un certificat auto-signé, puis les sauvegarde dans des fichiers
key.pem et cert.pem. Ces fichiers peuvent ensuite être utilisés pour configurer un serveur HTTPS, comme décrit précédemment. Cette méthode offre un moyen pratique de gérer les certificats directement dans votre code Python, simplifiant ainsi le processus de développement.Considérer les limitations de sécurité et de performance
Lorsque vous utilisez le module
http.server de Python pour servir du contenu, il est crucial de comprendre ses limitations en matière de sécurité et de performance. Bien qu'il soit utile pour le développement et les tests, il présente des faiblesses pour un usage en production.Limitations de sécurité
Le serveur HTTP simple de Python n'est pas conçu pour gérer des connexions sécurisées par défaut. Bien qu'il soit possible de le configurer pour utiliser HTTPS avec un certificat SSL, comme nous l'avons vu, cette configuration ne remplace pas les mesures de sécurité fournies par des serveurs web complets comme Apache ou Nginx. Voici quelques points à considérer :
- Absence de protections avancées : Le serveur n'inclut pas de fonctionnalités telles que la prévention des attaques par déni de service (DoS) ou la protection contre les injections SQL.
- Certificats auto-signés : L'utilisation de certificats auto-signés peut entraîner des avertissements de sécurité dans les navigateurs, ce qui peut être acceptable pour le développement, mais pas pour un site en production.
- Manque de journalisation : Les capacités de journalisation sont limitées, ce qui rend difficile la surveillance des activités suspectes.
Limitations de performance
Le module
http.server est conçu pour être simple et léger, ce qui signifie qu'il ne peut pas gérer efficacement un grand nombre de requêtes simultanées. Voici quelques limitations à prendre en compte :- Concurrence limitée : Le serveur utilise un modèle de traitement des requêtes à un seul fil, ce qui peut devenir un goulot d'étranglement sous une charge élevée.
- Absence de mise en cache : Il n'offre aucune fonctionnalité de mise en cache, ce qui peut affecter les performances si le même contenu est demandé fréquemment.
- Gestion basique des requêtes : Le traitement des requêtes est basique et ne bénéficie pas des optimisations présentes dans les serveurs web plus avancés.
Recommandations
Pour les projets en production, il est recommandé de passer à des solutions plus robustes qui offrent des performances améliorées et des fonctionnalités de sécurité avancées. Des serveurs comme Nginx ou Apache, ou des frameworks comme Flask ou Django, sont mieux adaptés pour gérer les besoins complexes d'une application web en production. Par ailleurs, l'utilisation d'un proxy inverse pour gérer les connexions et les certificats SSL peut renforcer la sécurité et améliorer la capacité à gérer des charges importantes.
Conclusion
En conclusion, le module
http.server de Python offre une solution rapide et pratique pour lancer un serveur HTTP simple, idéal pour des tests ou le développement local. Il permet de servir facilement du contenu statique ou dynamique, d'exécuter des scripts à distance via CGI, et même de sécuriser les connexions avec HTTPS en utilisant des certificats auto-signés. Cependant, il est important de garder à l'esprit les limitations inhérentes à cette solution en termes de sécurité et de performance.Utilisation pour le développement
Pour les développeurs,
http.server constitue un outil précieux qui facilite la mise en place rapide d'un environnement de test. Il permet de visualiser les modifications de code en temps réel, de tester l'intégration de scripts, et de partager des fichiers localement sans configuration complexe. Cette simplicité d'utilisation est l'un des principaux avantages de ce module.Considérations pour la production
Bien que
http.server puisse être utilisé pour des démonstrations ou des applications de petite envergure, il n'est pas adapté pour un déploiement en production en raison de ses faiblesses en matière de sécurité et de performance. Les développeurs devraient envisager de passer à des solutions plus robustes, telles que des serveurs web complets ou des frameworks qui offrent une gestion avancée des requêtes, des capacités de mise en cache, et des protections renforcées contre les cyberattaques.Perspectives futures
Pour ceux qui souhaitent explorer davantage, l'apprentissage de frameworks web comme Flask ou Django peut ouvrir de nouvelles possibilités pour développer des applications web sécurisées et performantes. Ces outils offrent des fonctionnalités intégrées pour la gestion des bases de données, le routage avancé, et la sécurité, ce qui simplifie le développement de projets complexes.
En résumé,
http.server est un excellent point de départ pour comprendre les bases du fonctionnement d'un serveur web et pour réaliser des tâches simples. Cependant, pour répondre aux exigences d'une application en production, il est nécessaire de se tourner vers des solutions plus adaptées qui garantissent la sécurité des données et la satisfaction des utilisateurs finaux.Share with
💙 Thank you for reading the article until the end!

Romain DE LA SOUCHÈRE
Lead Developer, Expert Cloud et DevOps
Ingénieur de formation avec plus de 11 ans d'expérience dans le développement back-end et le data engineering. Expert dans l’industrialisation des projets data dans le cloud.
» Learn MoreAssociated articles
See all our articles →

mars 6, 2025
L’IA en blouse blanche : Dragon Copilot, un assistant médical pas comme les autres !Reading time: 4 min
Associated trainings
All our trainings →
Préparez la certification Azure AI‑102
20 heures
Beginner
Guarantee

Préparez la certification PL‑300
24 heures
Beginner
Guarantee

Préparez la certification AZ-900
10 heures
Beginner
Guarantee

Préparez la certification DP‑700
24 heures
Beginner
Guarantee

Préparez la certification DP‑900
10 heures
Beginner
Guarantee

