2009-10-20 6 views
2

J'écris un serveur http de base en C. La gestion d'un simple fichier .html statique est simple mais je ne sais pas comment gérer les extensions de fichier dynamiques .pl .cgi.Traitement des requêtes CGI dans un serveur http bare-bones

Je sais que je vais devoir utiliser exec() mais comment est ma question?

+0

Pourquoi? Pourquoi? Oh pourquoi? – innaM

+0

@Manni: devoirs ... – Kev

+2

Quand j'étais à l'école, c'était 'Sieve of Eratosthenes' ou 'DB of recepies de cuisine' ... donc est-ce que les serveurs 'http' sont maintenant? – lexu

Répondre

2

Oui, vous devriez appeler exec. En particulier, vous voudrez probablement exécuter un interpréteur de commandes, qui déterminera le type de script (par exemple, perl, shell, etc.) ou binaire du programme cgi, et l'exécutera correctement.

La séquence habituelle est: créer des tuyaux avec un tuyau, une fourchette pour générer un nouveau processus, dup2 pour raccorder stdin et stdout aux tuyaux, et exec (pour exécuter le nouveau programme).

Vous appelerez probablement la variante exec de exec. Le dernier paramètre est un ensemble de variables d'environnement pour votre programme cgi. Configurez les paires de valeurs de nom dans la spécification cgi en fonction de la demande entrante. Ceux-ci auront des noms comme REQUEST_METHOD et QUERY_STRING.

Ensuite, écrivez le contenu de la requête dans l'entrée standard du CGI. Ce sera la chaîne de paramètre de requête dans le cas de POST, par exemple. Enfin, lisez le fichier stdout et renvoyez-le au navigateur.

2

Jetez un coup d'œil au CGI Spec. Plus précisément, les sections 4 «Invocation du script» et 6 «Entrée de données dans le script CGI». Vous devrez définir les variables d'environnement pour que le script cgi soit lu (QUERY_STRING, SCRIPT_NAME, etc.). Ce n'est pas le cas.

2

Le rôle du serveur HTTP est de mettre en œuvre le protocole HTTP (essentiellement protocole de communication se reposant sur TCP/IP)

Soutien .pl, cgi, etc est un rôle de serveur d'applications. Il y a beaucoup de bons exemples. Par exemple, dans Ruby on Rails, vous pouvez utiliser des serveurs Web (Apache/nginx) et exécuter des interpréteurs ruby ​​derrière ceux-ci (qui traiteront en fait le code HTML avec le code Ruby incorporé)

Vous avez vraiment besoin de savoir quel est votre objectif.

+0

-1 par votre définition Apache est un 'Serveur d'Application'. La prise en charge d'IMO signifie ici «activation», et non «exécution sur le serveur http». – lexu

+1

Apache n'est pas un serveur d'applications. C'est un serveur web. L'exécution de pl cgi etc. nécessite un environnement d'exécution. – Zepplock

Questions connexes