Bonjour

Je travaille actuellement sur un proxy HTTP en C#, et j'ai quelques petites question concernant le fonctionnement des protocoles HTTP et TCP.

Mon programme (proxy HTTP) reçoit des formulaires sous forme de requête HTTP POST, et une fois que j'ai fini de recevoir toute la requête, je veux répondre ça au client :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
HTTP/1.1 200 OK
Content-Type: text/plain

Merci, j'ai bien reçu votre formulaire.
Donc ça marche bien, mais seulement si je ferme la connexion TCP après avoir envoyé la réponse :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
TCPclient.GetStream().Write(responseBytes, 0, responseBytes.Length); // envoi de la réponse
TCPclient.Close(); // fermeture de la connexion
TCPclient = TCPlistener.AcceptTcpClient(); // on attend les futures requêtes
Si je ne ferme pas la connexion TCP, mon navigateur (firefox ou chrome) "mouline" comme si il n'arrivait pas à joindre le serveur, ou comme si il attendait toujours sa réponse.

Est-ce que c'est normal, et surtout est-ce qu'on peut régler ce problème autrement qu'en refermant la connexion TCP ?

Ce qui m'étonne c'est que je vois souvent des headers HTTP "Connection: keep-alive" ou "Connection: close", ce qui sous-entend qu'on peut laisser la connexion ouverte.
Enfin voilà, je ne sais pas trop ce qu'impliquent ces headers, et quel est leur influence sur le comportement du client (navigateur) et du serveur, j'attends vos lumières !

Merci