¿Qué significa "Conexión: cerrar" cuando se usa en el mensaje de respuesta?


30

Cuando el cliente usa el Connection: closeencabezado en el mensaje de solicitud, esto significa que quiere que el servidor cierre la conexión después de enviar el mensaje de respuesta.

Pensé que este encabezado solo se usa en los mensajes de solicitud, pero he notado que también se usa en los mensajes de respuesta. Por ejemplo:

ingrese la descripción de la imagen aquí

¿Qué significa este encabezado cuando se usa en el mensaje de respuesta?

Creo que significa que el servidor cerrará la conexión después de enviar el mensaje de respuesta (incluso si el cliente ha utilizado el Connection: keep-aliveencabezado en su mensaje de solicitud). ¿Estoy en lo correcto?

Respuestas:


28

Si eso es correcto. El servidor puede simplemente decir "No apoyo su solicitud de mantenimiento de vida y simplemente cerrará la conexión cuando haya terminado".

De RFC 2616, Sección 14.10:

HTTP / 1.1 define la opción de conexión "cerrar" para que el remitente
indique que la conexión se cerrará después de completar la
respuesta. Por ejemplo,

   Connection: close

en los campos de encabezado de solicitud o de respuesta indica que la conexión NO DEBE considerarse "persistente" (sección 8.1)
después de que se complete la solicitud / respuesta actual.

Las aplicaciones HTTP / 1.1 que no admiten conexiones persistentes DEBEN incluir la opción de conexión "cerrar" en cada mensaje.


3
Eso es extraño OMI, ¿por qué decir que la conexión se cerrará si el servidor simplemente puede cerrarla? El cliente no debería ver que la conexión fue cerrada por el servidor. ¿Alguna idea de cuál era el punto en este encabezado? No veo ningún valor aquí.
Pavel P

1
@Pavel La aplicación web incluye el encabezado http "Conexión: cerrar" en la respuesta en los casos en que desea informar al equilibrador de carga frontal para cerrar la conexión de mantener vivo en caso de que el equilibrador de carga esté usando uno.
Basilio A

1
@BasilA para que el equilibrador de carga cierre la conexión al servidor o al cliente? El equilibrador de carga IMO pudo ver que el servidor cerró la conexión y lo sabría sin leer ningún encabezado. También lo contrario es cierto: el servidor puede cerrar la conexión sin el Connection: closeencabezado
Pavel P

@Pavel El equilibrador de carga generalmente recibe múltiples conexiones de múltiples clientes y utiliza la misma conexión con el backend mediante el uso de multiplexación a través de una conexión de mantenimiento. Cuando algunos backends no quieran ser parte de esta multiplexación, la respuesta http del backend debe incluir una "Conexión: cerrar" para informar al equilibrador de carga que cierre su conexión y pare la multiplexación. Esto se describe en detalle en la Guía de equilibrio de carga de AWS (desplácese hacia abajo hasta 'Conexiones HTTP') docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A

2
@BasilA Parece que tienes razón. Interesante. El campo de encabezado general de Conexión permite al remitente especificar las opciones que se desean para esa conexión en particular y NO DEBEN ser comunicadas por proxys a través de conexiones adicionales.
Daniel F
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.