significa que keep headers enable conexion close alive java http http-headers network-protocols

java - que - ¿Cómo puedo saber CUÁNDO cerrar una conexión HTTP 1.1 Keep-Alive?



keep-alive http (4)

Estoy escribiendo un servidor web en Java y quiero que sea compatible con las conexiones HTTP 1.1 Keep-Alive. Pero, ¿cómo puedo saber cuándo el cliente ha terminado de enviar solicitudes para una conexión determinada? (como un doble final de línea o algo así).

Veamos cómo stackoverflow maneja esta pregunta muy oscura: respuestas para las cuales, en Google, están envueltas en especificaciones técnicas y lenguaje oscuro. Quiero una respuesta en inglés simple para un programador que no sea C :)

Ya veo. eso confirma mi sospecha de tener que confiar en SocketTimeoutException. Pero no estaba seguro de si había algo en lo que pudiera confiar del cliente que indicara que se hizo con la conexión, lo que me permitiría cerrar las conexiones antes en la mayoría de los casos, en lugar de esperar el tiempo de espera. Gracias


Veamos cómo maneja esta pregunta muy oscura: respuestas para las cuales, en Google, están envueltas en especificaciones técnicas y lenguaje oscuro.

Acabo de poner ¿ Cuándo debería cerrar una conexión HTTP 1.1? en Google, y el tercer éxito fue HTTP Made Really Easy. En la tabla de contenido, hay un enlace a una sección titulada Conexiones persistentes y el encabezado "Conexión: cerrar" . Esta sección tiene tres párrafos, usa un lenguaje muy simple y te dice exactamente lo que quieres saber.

Quiero una respuesta en inglés simple para un programador que no sea C :)

Con el debido respeto, la programación es un esfuerzo técnico donde los detalles son importantes. Leer documentación técnica es una habilidad absolutamente esencial. Confiar en interpretaciones de terceros "sencillas en inglés" de las especificaciones solo dará como resultado que usted haga un mal trabajo.


Lo cierras cuando lo deseas. El encabezado indica que el cliente preferiría que dejara la conexión abierta, pero eso no requiere que el servidor cumpla. La mayoría de los servidores lo dejan abierto durante aproximadamente 5-10 segundos, algunos no le prestan atención en absoluto.


Debería leer los RFC que tratan con la función Keep-Alive. De lo contrario, podría terminar con un servidor que no funciona como se esperaba.

Como @ [Stephen] ya ha señalado, el servidor puede cerrar la conexión en cualquier momento que lo desee (vale, no en el medio de un par de solicitud / respuesta). Lo mismo para el cliente. Cualquier otra solución permitiría al servidor o al cliente realizar un DoS en la otra parte.

EDITAR: Eche un vistazo al encabezado de conexión. El cliente (y el servidor) pueden solicitar un cierre de conexión elegante usando el encabezado. Por ejemplo, Connection: close dentro de la solicitud es una solicitud al servidor para cerrar la conexión después de que envíe la respuesta.


Si está construyendo su servidor para cumplir con el estándar, entonces ya tiene mucha información que lo guiará aquí.

Simple hablado, debe basarse en un tiempo desde que se utilizó una conexión, y no tanto en el nivel de datos de solicitud.

En una forma más extensa, la sección de consideraciones prácticas del documento HTTP / 1.1 tiene alguna guía para usted:

"Los servidores suelen tener un valor de tiempo de espera más allá del cual ya no mantendrán una conexión inactiva. Los servidores proxy pueden hacer que este sea un valor más alto, ya que es probable que el cliente haga más conexiones a través del mismo servidor. conexiones no establece requisitos sobre la duración (o existencia) de este tiempo de espera para el cliente o el servidor ".

o

"Cuando un cliente o servidor desea agotar el tiempo de espera, DEBE emitir un cierre elegante en la conexión de transporte. Los clientes y servidores DEBEN vigilar constantemente el otro lado del transporte y responder a él según corresponda. Si un cliente o servidor no detecta el cierre de la otra parte rápidamente podría causar el drenaje de recursos innecesarios en la red ".