Estoy tratando de entender dónde puedo configurar un tiempo de espera de solicitud para todas las solicitudes que llegan a un servlet mío (o a todos mis servlets)? ¿Es eso, como creo, una propiedad de contenedores? Además, ¿cómo afecta esto a los diferentes navegadores? ¿Todos cumplen con el parámetro que dicta el contenedor? O tal vez el tiempo de espera de solicitud ni siquiera es algo que pueda controlar y cada navegador decide por sí mismo. (Para que quede claro, no estoy hablando del tiempo de espera de la sesión)Cómo especificar el parámetro Http Request timeout en el contenedor de servlets de Java
Respuesta
El tiempo de espera de un cliente (es decir, cuánto tiempo espera una respuesta a una solicitud HTTP) se determina en el cliente. Para IE, vea this, y para Firefox vea this.
No puede controlar este tiempo de espera del servidor.
Antes que nada, gracias por la respuesta, esto no se puede cambiar programáticamente en el lado del cliente (a través de JavaScript) ¿verdad? – Ittai
No lo creo, no. –
No puede controlar el tiempo de espera del cliente desde el servidor. Sin embargo, es posible que pueda enviar datos de vuelta al cliente de vez en cuando mientras su operación de larga ejecución está ocupada. Esto evitará que el cliente agote el tiempo de espera y se puede usar para mostrar el progreso al usuario, etc. Escriba datos en OutputStream o Writer obtenidos de la respuesta y llame al flujo para enviar datos parciales al cliente.
¿cómo se puede obtener esta información parcial si se usa xmlHttpRequest? He leído que en IE no puede acceder a los datos hasta que finalice la solicitud – Ittai
Sí, pero el cliente no debe esperar hasta que lleguen algunos datos. –
Tiene razón, pero es un poco más complicado porque Estoy implementando Comet así que usaré 'Long Polling' y necesitaré un tiempo de espera más largo para guardar las solicitudes o usar Streaming, que es lo que pensé que David estaba sugiriendo. Gracias de todas formas. – Ittai
A pesar de que no se puede controlar el tiempo de espera del cliente, puede hacer que el servidor muy impaciente :) Por ejemplo, en Tomcat, se puede hacer esto en su conector,
<Connector port="8080"
...
connectionTimeout ="5000"
disableUploadTimeout="false" />
Esto hace que el servidor sólo se espere 5 segundos y cierra la conexión. El navegador recibirá un error de conexión cerrada. Puede tratarlo igual que el tiempo de espera en el cliente.
Por supuesto, esto solo funciona si el tiempo de espera es causado por el servidor, no hay problemas de conectividad entre el navegador y el servidor.
"timeout" no hay tal parámetro en Tomcat Connector – robsf
El nombre del parámetro es connectionTimeout dentro de la etiqueta Connector, así:
- 1. Contenedor de servlets de Java para desarrollo
- 2. JAVA: http post request
- 3. Descripción del contenedor de servlets
- 4. Android, Java: HTTP POST Request
- 5. Diferencia entre el servidor web y el contenedor de servlets
- 6. http connection timeout issues
- 7. Microsoft Unity. ¿Cómo especificar un cierto parámetro en el constructor?
- 8. Java Servlets subprocesamiento modelo
- 9. PHP SOAP HTTP Request
- 10. Cómo especificar el "encabezado de solicitud HTTP" en OpenURI
- 11. Copiando Http Request InputStream
- 12. http post request erlang
- 13. Http Request Life Cycle
- 14. servlet request parámetro codificación de caracteres
- 15. Http Request - Bypass DNS [.Net]
- 16. línea de comando curl timeout parámetro
- 17. Reading HTTP Request Headers personalizados
- 18. Cómo especificar el parámetro para el método de extensión de tipo de lista genérico en C#
- 19. especificar el tipo de parámetro de función, pero no variables
- 20. Cómo convertir el cuerpo de la solicitud HTTP en el objeto JSON en Java
- 21. Recarga/refrescante archivo de configuración de Spring sin necesidad de reiniciar el contenedor de servlets
- 22. Nombre para HTTP Request + Response
- 23. solicitud HTTP node.js utilizando 'request' de mikeal
- 24. Obtenga información sobre el error al utilizar Eventmachine Http Request
- 25. ¿Cómo resolver el problema expirado de TimeOut?
- 26. Parámetros múltiples en http get request
- 27. ¿Buen servidor web/contenedor de servlets para Clojure Web Apps?
- 28. ¿Cómo especificar una matriz de clase en el parámetro de firma del método GetMethodID?
- 29. Java InetAddress.isReachable() timeout
- 30. Cómo especificar un código de error HTTP?
Buena pregunta. He leído su comentario en la última respuesta y me pregunto qué enfoque ha elegido para asegurarse de que la solicitud no se cierre. Estoy tratando de hacer Comet y no sé cómo hacerlo bien. ¿Podría sugerir una solución? ¡Gracias! – Dragos
@Dragos Terminé simplemente implementando un mecanismo de interrogación Largo simple que devolvió la solicitud al usuario después de ~ 29 segundos (que es menos de 30 segundos [el límite de IE]). Lo que haría ahora si tuviera el mismo problema era intentar usar la API de websockets. – Ittai
¿Está buscando aquí un tiempo de espera tal que "en el momento x" borre la respuesta actual y mate el hilo actual, de modo que el navegador reciba datos lo suficientemente rápido? Los navegadores FWIW en estos días parecen esperar "muchos minutos" en una respuesta ... – rogerdpack