Question

Je dois créer un serveur HTTP simple en C. Des conseils? Liens? Des échantillons?

Était-ce utile?

La solution

Je vous suggère de consulter httpd minuscule . Si vous voulez l'écrire à partir de zéro, vous voudrez lire attentivement RFC 2616 . Utilisez les prises BSD pour accéder au réseau à un niveau très bas.

Autres conseils

Je vous conseillerais de consulter: Guide pratique pour la rédaction de clients et de serveurs

Ce que vous devez implémenter par étapes incrémentielles est:

  1. Lancez votre couche de base de sockets TCP (écoutez le ou les ports, acceptez les connexions client et envoyez / recevez des données).
  2. Implémentez un lecteur mis en mémoire tampon de manière à pouvoir lire les demandes une ligne à la fois (délimitées par CRLF).
  3. Lisez la toute première ligne. Analyser la méthode, la version de la requête et le chemin.
  4. Implémentation de l'analyse d'en-tête pour "En-tête: valeur" syntaxe. N'oubliez pas de déplier les en-têtes pliées.
  5. Vérifiez la méthode de requête, le type de contenu et la taille du contenu pour déterminer comment / si le corps sera lu.
  6. Implémentez le décodage du contenu en fonction du type de contenu.
  7. Si vous envisagez de prendre en charge HTTP 1.1, implémentez des éléments tels que "100 Continuer", transfert persistant, segmenté.
  8. Ajoutez des mesures de robustesse / sécurité telles que la détection des demandes incomplètes, la limitation du nombre maximal de clients, etc.
  9. Remballez votre code et ouvrez-le:)

Un serveur HTTP est conceptuellement simple:

  • Ouvrez le port 80 pour écouter
  • Lorsque le contact est établi, rassemblez un peu d'informations (obtenez principalement - vous pouvez ignorer le reste pour l'instant)
  • Traduire la demande en demande de fichier
  • Ouvrez le fichier et recrachez-le sur le client

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 un socket TCP sur le port 80, commencez à écouter de nouvelles connexions, implémentez this . Selon vos objectifs, vous pouvez presque tout ignorer. Dans le meilleur des cas, 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 = partage http://www.ibm.com/developerworks/systems/library / es-nweb /

Cet article comprend un pseudocode, des explications et des commentaires.

EDIT: le lien d’IBM est mort. J'ai enregistré un fichier PDF de la page Web sur Google Drive. Voici le code de téléchargement:

https://drive.google.com/file/d/ 0B3msld7qnNOhSGZGdDJJMmY0VHM / view? Usp = partage

@ 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 séparer et utiliser le code compatible C.

http://code.google.com/p/mountain-cms/

La spécification HTTP et Firebug m'a été très utile lorsque je devais le faire pour mes devoirs .

Bonne chance avec le vôtre. :)

Je suggérerais de rechercher dans la source quelque chose comme lighthttpd .

http://www.manning.com/hethmon/ - "Guide illustré" to HTTP de 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émentera / l'étendra.

Utilisez des fonctions de socket spécifiques à la plate-forme pour encapsuler le protocole HTTP, comme les développeurs de Apache . .

Il existe un en double avec davantage de réponses .

Un spserver non encore mentionné est

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top