Titre RNCP Niveau 7

Maîtrisez pipelines, cloud & IA pour devenir Data Engineer opérationnel.

Devenez Data Engineer

DataScientist.fr

Formations

L'équipeLa plateforme
Offre entreprises

🇫🇷

Lancer un serveur http en une ligne de code en Python - Tutoriel pratique
Python
Web Development

Lancer un serveur http en une ligne de code en Python - Tutoriel pratique

Romain DE LA SOUCHÈRE

Lead Developer, Expert Cloud et DevOps

Publié le 2 janvier 2025 · 11 min de lecture

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.

Partager avec

💙 Merci d'avoir parcouru l'article jusqu'à la fin !

Romain DE LA SOUCHÈRE

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.

» En savoir plus

Formations associés

Toutes nos formations

Préparez la certification PL‑300
Préparez la certification PL‑300
24 heures
Débutant
Garantie
Préparez la certification AZ-900
Préparez la certification AZ-900
10 heures
Débutant
Garantie
Préparez la certification DP‑700
Préparez la certification DP‑700
24 heures
Débutant
Garantie
Préparez la certification DP‑900
Préparez la certification DP‑900
10 heures
Débutant
Garantie

DataScientist.fr

By AXI Technologies

128 Rue de la Boétie,
75008, Paris, France

bonjour@datascientist.fr

+33 1 70 39 08 31

+33 6 86 99 34 78

© 2026 DataScientist.fr - AXI Technologies - Tous droits réservés