J'ai besoin de construire un simple serveur HTTP
en C.
Des conseils? Liens? Des échantillons?
Réponses
Trop de publicités?Je vous recommande de jeter un oeil à: Un Guide Pratique pour Écrire des Clients et des Serveurs
Ce que vous avez à mettre en œuvre en plusieurs étapes:
- Obtenez votre base de sockets TCP couche en cours d'exécution (écouter sur le port/ports, accepter les connexions des clients et envoyer/recevoir des données).
- Mettre en œuvre un tampon lecteur de sorte que vous pouvez les demandes de lecture d'une ligne (délimité par un CRLF) à la fois.
- Lire la première ligne. Analyser la méthode, la version de requête et le chemin d'accès.
- Mettre en œuvre l'analyse de l'en-tête de "en-Tête: la valeur de syntaxe". N'oubliez pas de dépliage plié en-têtes.
- Vérifier la méthode de la requête, le type de contenu et la taille du contenu à déterminer comment/si le corps va être lu.
- Mettre en œuvre le décodage du contenu basé sur le type de contenu.
- Si vous allez à l'appui de HTTP 1.1, mettre en œuvre des choses comme "100 Continuer", keep-alive, bloc de transfert.
- Ajouter de la robustesse/mesures de sécurité, comme la détection des demandes incomplètes, en limitant le nombre maximum de clients.
- Emballage de votre code et de l'open source :)
Je vous suggère de jeter un oeil à httpd minuscule . Si vous voulez écrire à partir de zéro, alors vous aurez envie de lire attentivement la RFC 2616 . Utilisez les sockets BSD pour accéder au réseau à un niveau très bas.
Un serveur HTTP est un concept simple:
- Ouvrir le port 80 pour l'écoute
- Lorsque le contact est établi, recueillir un peu de l'information (obtenir principalement - vous pouvez ignorer le reste pour l'instant)
- Traduire la demande en une demande de fichier
- Ouvrir le fichier et de le recracher sur le client
Il devient de plus en plus difficile en fonction de combien de HTTP, vous souhaitez soutenir POST est un peu plus compliqué, de scripts, de traitement de plusieurs demandes, etc.
Mais la base est très simple.
Mongoose (anciennement Simple HTTP Daemon) est plutôt bon. En particulier, il est intégrable et compile sous Windows, Windows CE et UNIX.
Ouvrez un socket TCP sur le port 80, commencez à écouter de nouvelles connexions, implémentez -le . Selon vos objectifs, vous pouvez presque tout ignorer. Au plus simple, vous pouvez envoyer la même réponse pour chaque demande, ce qui implique simplement l'écriture de texte dans le socket.