2011-04-30 2 views
1

J'ai écrit un serveur web simple en C qui écoute une connexion et envoie du texte sur un socket. Je veux mon serveur soit accessible par un serveur. Dans ce cas, je devrais s * en-têtes de fin tels que CODE (200), le type de contenu, la longueur du contenu *.C serveur web en-tête envoi

  • Comment ces en-têtes peuvent-ils être envoyés au client (navigateur ou telnet)?
  • Comment les en-têtes de requête peuvent-ils être extraits?
+0

Maintenant, c'est une question assez vaste. Les en-têtes sont des lignes de texte. Analyser/mettre en forme en conséquence ...? Google pour une spécification du protocole HTTP, et à partir de là. –

Répondre

2

(Peut-être, je ne comprends pas la question, voter contre moi.)

Le format d'en-tête de réponse HTTP est pas trop difficile:

header1\n 
header2\n 
<empty line>\n 
content\n 
content\n 

C'est tout. Le serveur web doit envoyer les en-têtes, une ligne vide, puis le contenu.

Si vous souhaitez tester l'envoi d'en-tête, vous devez le vérifier avec un navigateur. Ajouter une ligne à votre serveur Web pour envoyer l'en-tête suivant:

Content-Disposition: attachment; filename=download_me.txt 

Ainsi, lorsque vous vous connectez à votre serveur Web avec un navigateur, il fera apparaître une « enregistrer sous » dialogue au lieu d'afficher la page Web téléchargée dans le navigateur fenêtre. Si vous avez la boîte de dialogue et que le fichier téléchargé est également OK, votre serveur Web envoie les en-têtes correctement.

G Il est une autre question, wether le client les traite comme vous (et W3C) attendre ...

Edit: état ok HTTP est:

HTTP/1.1 200 OK\n 

Google pour plus de codes d'état .

+0

Vous @ @ ern0 avez raison pour un certain montant. Pour être précis, je voulais savoir comment envoyer ces en-têtes au navigateur. Est-ce juste en les écrivant à la douille comme jachère? // new_fd est le descripteur du fichier de socket ' send (nouveau_fd, "HTTP/1.0 200 OK \ n", 16, 0); \t \t \t send (nouveau_fd, "Content-Type: text/html \ n", 24, 0); \t \t \t send (nouveau_fd, "Content-Length: 29 \ n", 20, 0); \t \t \t send (nouveau_fd, "contenu du fichier \ n", 10, 0); ' –

+0

Oui, c'est tout, il n'y a pas de magie, juste la ligne vide. Comme je l'ai dit, essayez-le avec un navigateur. La longueur du contenu n'est pas obligatoire. – ern0