Pregunta

Estoy escribiendo un servidor web en Java y quiero que admita 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 empantanadas en especificaciones técnicas y lenguaje oscuro. Quiero una respuesta en inglés para un programador que no sea C :)


Ya veo. eso confirma mi sospecha de tener que confiar en la 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

¿Fue útil?

Solución

Si está creando su servidor para cumplir con el estándar, entonces ya tiene mucha información para guiarlo aquí.

Habla simple, debe basarse en un tiempo desde que se usó una conexión, y no tanto en el nivel de los datos de solicitud.

De manera más larga, la sección de consideraciones prácticas del documento HTTP / 1.1 tiene alguna guía para usted:

  

" Los servidores generalmente tendrán algunos   valor de tiempo de espera más allá del cual lo harán   ya no mantener un inactivo   conexión. Los servidores proxy pueden hacer   este es un valor más alto ya que es probable   que el cliente hará más   conexiones a través del mismo servidor.   El uso de conexiones persistentes.   no establece requisitos en la longitud   (o existencia) de este tiempo de espera para   ya sea el cliente o el servidor. "

o

  

" Cuando un cliente o servidor desea   tiempo de espera DEBE emitir un agraciado   cerrar en la conexión de transporte.   Los clientes y servidores DEBEN ambos   constantemente vigilando el otro lado de   el transporte se cierra y responde   según sea apropiado. Si un cliente o servidor   no detecta el cierre del otro lado   rápidamente podría causar innecesaria   drenaje de recursos en la red. "

Otros consejos

  

Veamos cómo stackoverflow maneja esta pregunta muy oscura: respuestas para las cuales, en Google, están empantanadas 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 " ; Conexión: cerrar " Encabezado . 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 sencillo para un programador que no sea C :)

Con el debido respeto, la programación es un esfuerzo técnico donde los detalles son muy importantes. Leer la documentación técnica es una habilidad absolutamente esencial. Confiando en `` Inglés simple '' Las interpretaciones de terceros de las especificaciones solo darán lugar a un mal trabajo.

Ciérralo cuando quieras. 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 unos 5-10 segundos, algunos no le prestan atención en absoluto.

Debería leer los RFC relacionados 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 es libre de cerrar la conexión en cualquier momento que lo desee (ok, 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 utilizando 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top