IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

HTTP : Keep-Alive et Stop


Sujet :

Développement

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut HTTP : Keep-Alive et Stop
    Salut à tous,

    J'ai un petit problème dans la conception de mon application.
    C'est une sorte de proxy, en C#, donc bien entendu cela touche de prêt le protocol http.
    J'ai pu gérer presque tout, à l'exeption de 2 choses :
    - Keep-Alive : je ne vois pas du tout comment gêrer ca, j'ai l'impression que le socket se ferme après chaque renvoi d'informations, donc si quelqu'un pouvait me dire comment fonctionne le Keep-Alive en http, quels sont les entêtes à 'renvoyer'. Le navigateur me dit bien qu'il supporte le Keep-Alive, mais après je ne peux pas le gérer.

    - Ensuite toujours du côté Navigateur/Proxy, lorsque l'utilisateur annule le chargement d'une page, comment puis-je savoir que la demande a été annulée ? Car pour le moment s'il lance un téléchargement de 50Mo, bien qu'il ait annulé sur le navigateur, le proxy va quand même télécharger les données. Le navigateur envoi t'il une information ou fait il une action donnant les indiquations sur le fichier annulé, histoire que je puisse fermer la connexion de mon côté aussi et fermer le thread.

    Merci d'avance !

    EDIT : petite edit, si le créateur du sujet Le Protocole HTTP passe par là, je lui conseillerai de pousser un peu + son tutorial qui est déjà bien, vers le keep-alive entre autre, ainsi que les différentes formes d'entêtes que l'on peut rencontrer (cookie, forme de la methode post, ...) en illustré, et comment les gérer

    Maxime.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 86
    Points : 97
    Points
    97
    Par défaut
    salut,


    le Keep-Alive fait partie du mecanisme de connexions persistantes definies par les RFC 2068 et 2616. il serait inutile de reprendre point par point le contenu des RFC ici, puisque tout y est explique en detail, mais d'un point de vue general:

    . le principe consiste a reutiliser une meme connexion TCP pour plusieurs requetes/reponses HTTP, afin (entre autres) de reduire le temps de latence induit par le "three way handshake" TCP, et de permettre le "pipelining" des requetes et des reponses.

    . en HTTP 1.1, le comportement par defaut d'un serveur ou d'un proxy doit etre de considerer que la connexion est persistante, a moins que le client ne specifie explicitement le contraire par un "Connection: Close" (il s'agit donc de tester la presence d'un "Connection: Close" pour determiner si la connexion TCP doit etre fermee, et non celle d'un "Connection: Keep-Alive" pour determiner si elle doit rester ouverte).

    . en HTTP 1.0, c'est l'inverse: la connexion persistante doit etre explicitement negociee par le client par l'envoi d'un "Connection: Keep-Alive" (voir le RFC2068, sec. 19.7.1).

    . d'une facon generale, le header "Connection: " ne doit pas etre forwarde par un proxy. les gestions respectives des connexions client <-> proxy et proxy <-> serveur doivent etre decorrellees.

    l'interpretation faite des RFC par les differentes implementations de clients et serveurs HTTP est ici assez libre, voire fantaisiste. attention a ce que tu renvoies au client (en particulier, le "Content-Length"), ou tu risques d'avoir le genre de surprises auxquelles tu fais allusion (le client clos la connexion bien qu'il ait envoye un "Connection: Keep-Alive"). dans tous les cas tu dois savoir gerer ca de facon souple; sans vouloir y aller a tout prix de ma citation facile.. "Be liberal in what you accept and conservative in what you send" (Jon Postel).


    concernant l'annulation du chargement d'une resource par le client, c'est assez simple: le client clos la connexion TCP lorsque l'utilisateur clique sur "stop" (c'est la seule "information" qu'il envoie). je ne sais pas quel modele tu as choisi pour gerer tes connexions, mais generalement le meme thread gere une session HTTP de bout en bout (client <-> proxy <-> serveur), autour d'un select()/poll() (ou de l'equivalent MFC en C#). la sortie du select() suivi d'une lecture de taille 0 sur le socket client (+ test sur les signaux/exceptions eventuels) indique que la connexion a ete fermee et te permet a ton tour de clore proprement le socket serveur afin d'annuler le download en cours de route. c'est tout!


    j'espere t'avoir apporte quelques elements de reponse.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Merci !
    Merci Pirus, je pense pas que j'aurais de réponse + détaillées, je vais voir pour adapter cela lorsque j'aurais le temps.
    En tout cas merci des indiquations

    Maxime.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. HTTP et fermeture de la connexion TCP (keep-alive, close ?)
    Par Galdon dans le forum Développement
    Réponses: 0
    Dernier message: 02/12/2011, 16h35
  2. keep alive ?
    Par r1-1024 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 24/09/2009, 13h04
  3. WCF Keep-alive inactivityTimeout
    Par matdur dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 27/03/2008, 19h05
  4. Socket keep-alive
    Par Pass dans le forum MFC
    Réponses: 17
    Dernier message: 19/07/2004, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo