Question

J'écris un serveur Web en Java et je veux qu'il prenne en charge les connexions HTTP 1.1 Keep-Alive. Mais comment puis-je savoir quand le client a fini d'envoyer des requêtes pour une connexion donnée? (comme un double fin de ligne ou quelque chose).

Voyons comment stackoverflow traite cette question très obscure - des réponses pour lesquelles, sur Google, sont embourbées dans des spécifications techniques et un langage obscur. Je veux une réponse simple en anglais pour un programmeur non-C:)

je vois. cela confirme mes soupçons de devoir compter sur SocketTimeoutException. Mais je ne savais pas si le client pouvait s’en remettre à quelque chose qui indique que c’est fait avec la connexion - ce qui me permettrait de fermer les connexions plus tôt dans la plupart des cas - au lieu d’attendre le délai. Merci

Était-ce utile?

La solution

Si vous construisez votre serveur conformément à la norme, vous disposez déjà de nombreuses informations pour vous guider ici.

Parler simplement, il devrait être basé sur une heure depuis l’utilisation d’une connexion, et pas tellement au niveau des données de la demande.

De manière plus longue, la section consacrée aux considérations pratiques du document HTTP / 1.1 vous donne des indications:

  

" Les serveurs auront généralement des   valeur de délai d'attente au-delà de laquelle ils   ne plus maintenir un inactif   lien. Les serveurs proxy peuvent faire   cela une valeur plus élevée car il est probable   que le client fera plus   connexions via le même serveur.   L'utilisation de connexions persistantes   ne pose aucune exigence sur la longueur   (ou existence) de ce délai d'attente pour   le client ou le serveur. "

ou

  

" Lorsqu'un client ou un serveur souhaite   expirer, il devrait émettre une gracieuse   fermer sur la connexion de transport.   Les clients et les serveurs DEVRAIENT tous les deux   surveille constamment l'autre côté de   la fermeture du transport, et y répondre   selon le cas. Si un client ou un serveur   ne détecte pas la fermeture de l'autre côté   rapidement, il pourrait causer inutile   perte de ressources sur le réseau. "

Autres conseils

  

Voyons comment stackoverflow traite cette question très obscure - des réponses pour lesquelles, sur Google, sont embourbées dans des spécifications techniques et un langage obscur.

Je viens de mettre Quand dois-je fermer une connexion HTTP 1.1? dans Google, et le troisième hit fut HTTP Made Really Easy. La table des matières contient un lien vers une section intitulée Connexions permanentes et le " ; Connexion: fermer " En-tête . Cette section comporte trois paragraphes, utilise un langage très simple et vous indique exactement ce que vous voulez savoir.

  

Je veux une réponse simple en anglais pour un programmeur non-C:)

Sauf votre respect, la programmation est une entreprise technique dans laquelle les détails ont une grande importance. La lecture de la documentation technique est une compétence absolument essentielle. S'appuyant sur "Plain English" & les interprétations des spécifications effectuées par des tiers ne feront qu'en fait un mauvais travail.

Vous le fermez quand vous voulez. L'en-tête indique que le client préférerait que vous laissiez la connexion ouverte, mais cela n'exige pas que le serveur se conforme. La plupart des serveurs la laissent ouverte pendant environ 5 à 10 secondes. Certains n'y font même pas attention.

Vous devriez lire les RFC traitant de la fonctionnalité Keep-Alive. Sinon, vous risquez de vous retrouver avec un serveur qui ne fonctionne pas comme prévu.

Comme @ [Stephen] l'a déjà souligné, le serveur est libre de fermer la connexion quand il le souhaite (ok, mais pas au milieu d'une paire requête / réponse). Idem pour le client. Toute autre solution permettrait au serveur ou au client d’effectuer une DoS sur l’autre partie.

EDIT: Regardez l’en-tête Connection. Le client (et le serveur) peuvent demander une fermeture en douceur de la connexion à l'aide de l'en-tête. Par exemple, Connection: close à l'intérieur de la demande est une demande au serveur pour fermer la connexion après l'envoi de la réponse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top