Comment spécifier un paramètre de délai d'attente de requête HTTP sur un conteneur de servlets Java

StackOverflow https://stackoverflow.com/questions/1414795

Question

J'essaie de comprendre où je peux configurer un délai de demande pour toutes les demandes arrivant à l'un de mes servlets (ou à tous mes servlets)? Est-ce que c'est, je pense, une propriété de conteneur? Aussi, comment cela affecte-t-il les différents navigateurs? Sont-ils tous conformes aux paramètres dictés par le conteneur? Ou peut-être que le délai d'expiration de la demande n'est même pas quelque chose que je puisse contrôler et que chaque navigateur décide lui-même? (Juste pour préciser, je ne parle pas de timeout de session)

Était-ce utile?

La solution

Le délai d’expiration d’un client (c’est-à-dire le temps qu’il attend pour une réponse à une requête HTTP) est déterminé par le client. Pour IE, voir ceci , et pour Firefox voir this .

Vous ne pouvez pas contrôler ce délai depuis le serveur.

Autres conseils

Même si vous ne pouvez pas contrôler le délai d'expiration du client, vous pouvez rendre le serveur très impatient :) Par exemple, sur Tomcat, vous pouvez le faire dans votre connecteur,

<Connector port="8080"  
  ...
  connectionTimeout ="5000"
  disableUploadTimeout="false" />

Le serveur n’attend que 5 secondes et ferme la connexion. Le navigateur obtiendra une erreur de connexion fermée. Vous pouvez le traiter de la même manière que le délai d'attente dans le client.

Bien sûr, cela ne fonctionne que si le délai d'attente est causé par le serveur, pas par des problèmes de connectivité entre le navigateur et le serveur.

Vous ne pouvez pas contrôler le délai d'expiration du client à partir du serveur. Cependant, vous pourrez peut-être renvoyer des données au client de temps en temps pendant que votre longue opération est occupée. Cela empêchera le client d’arriver à expiration du délai imparti et pourra être utilisé pour afficher la progression de l’utilisateur, etc. Écrivez des données dans OutputStream ou Writer obtenues à partir de la réponse et appelez flush pour envoyer des données partielles au client.

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