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 :
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
4 HTTP/1.1 200 OK Content-Type: text/plain Merci, j'ai bien reçu votre formulaire.
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.
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
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
Partager