J'ai besoin de construire un serveur HTTP simple en C. Des conseils? Liens? Des échantillons?
Je vous suggère de jeter un oeil à minuscule httpd . Si vous voulez l'écrire à partir de zéro, alors vous voudrez complètement lire RFC 2616 . Utilisez prises BSD pour accéder au réseau à un niveau très bas.
Je vous conseillerais de consulter: Guide pratique pour écrire des clients et des serveurs
Ce que vous devez implémenter par étapes est la suivante:
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 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 TCP socket sur le port 80, commencez à écouter de nouvelles connexions, implémentez this . 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.
Regardez nweb (serveur Web de Nigel), "un petit serveur Web sûr [...] 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 code à télécharger:
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ ankushagarwal a apporté quelques modifications et a chargé sa version sur GitHub: https://github.com/ankushagarwal/nweb
J'ai écrit le mien que vous pouvez utiliser. Celui-ci fonctionne a sqlite, est thread-safe et est en C++ pour UNIX.
Vous devriez pouvoir le distinguer et utiliser le code compatible C.
Les spécifications HTTP et Firebug m'ont été très utiles lorsque je devais le faire pour my devoirs.
Bonne chance avec le tien. :)
Je suggère de regarder la source à quelque chose comme lighttpd .
http://www.manning.com/hethmon/ - "Le Guide illustré sur 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. mise en œuvre/extension.
Utilisez des fonctions de socket spécifiques à la plate-forme pour encapsuler le protocole HTTP, tout comme les gars derrière Apache .
Il y a un dupliquer avec plus de réponses .
Un candidat non encore mentionné est spserver .