J'ai besoin de créer un serveur HTTP simple en C. Des conseils? Liens? Des échantillons?
J'ai besoin de créer un serveur HTTP simple en C. Des conseils? Liens? Des échantillons?
Réponses:
Je vous suggère de jeter un œil au petit httpd . Si vous voulez l'écrire à partir de zéro, vous voudrez bien lire la RFC 2616 . Utilisez les sockets BSD pour accéder au réseau à un niveau très bas.
tiny httpd
est également sur github ici: github.com/larryhe/tinyhttpd
Je vous recommande de jeter un œil à: Un guide pratique pour écrire des clients et des serveurs
Ce que vous devez implémenter par étapes incrémentielles est:
Un serveur HTTP est conceptuellement simple:
Cela devient plus difficile en fonction de la quantité de HTTP que vous souhaitez prendre en charge - POST est un peu plus compliqué, les scripts, la gestion de plusieurs requêtes, 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 une socket TCP sur le port 80, commencez à écouter les nouvelles connexions, implémentez ceci . Selon vos objectifs, vous pouvez ignorer presque tout. Au plus simple, vous pouvez envoyer la même réponse pour chaque requête, ce qui implique simplement d'écrire du texte sur le socket.
Regardez nweb (Nigel's Web Server), "un petit serveur Web sécurisé [...] avec seulement 200 lignes de code source C":
https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing
http://www.ibm.com/developerworks/systems/library/es-nweb/
L'article comprend un pseudocode, des explications et des commentaires.
EDIT: le lien d'IBM est mort. J'ai enregistré un PDF de la page Web sur Google Drive. Voici le téléchargement du code:
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ ankushagarwal a apporté quelques modifications et a téléchargé sa version sur GitHub: https://github.com/ankushagarwal/nweb
J'ai écrit le mien que vous pouvez utiliser. Celui-ci fonctionne avec sqlite, est thread-safe et est en C ++ pour UNIX.
Vous devriez être en mesure de le séparer et d'utiliser le code compatible C.
Les spécifications HTTP et Firebug m'ont été très utiles lorsque je devais le faire pour mes devoirs.
Bonne chance avec le vôtre. :)
Je suggérerais de regarder la source à quelque chose comme lighthttpd .
http://www.manning.com/hethmon/ - "Illustrated Guide to HTTP par Paul S. Hethmon" de Manning est un très bon livre pour apprendre le protocole HTTP et sera très utile à quelqu'un qui l'implémente / l'étend.
Il y a un doublon avec plus de réponses .
Un candidat non encore mentionné est spserver .