type personalizados encabezados content cabeceras http encoding transfer chunked

personalizados - encabezados http



Codificación fragmentada y encabezado de longitud de contenido (3)

¿Es posible establecer el encabezado de longitud del contenido y también usar codificación de transferencia fragmentada? ¿Y al hacerlo, resuelve el problema de no saber la longitud de la respuesta en el lado del cliente cuando se usa fragmentado?

El escenario en el que estoy pensando es cuando tienes un archivo grande para transferir y no hay ningún problema para determinar su tamaño, pero es demasiado grande para almacenarlo por completo. (Si no está utilizando fragmentado, primero se debe amortiguar la respuesta completa, ¿no?)

Gracias.


1) No: "Los mensajes NO DEBEN incluir tanto un campo de encabezado de longitud de contenido como una codificación de transferencia no identificada. Si el mensaje incluye una codificación de transferencia de identidad no identificada, la longitud de contenido DEBE ser ignorada". ( RFC 2616, Sección 4.4 )

2) Y no, puedes usar Content-Length y stream; El protocolo no restringe cómo funciona su implementación.


Tienes que usar Content-Length o chunking, pero no ambos.

Si conoce la longitud de antemano, puede usar Content-Length en lugar de fragmentación, incluso si genera el contenido sobre la marcha y nunca lo tiene todo a la vez en su búfer.

Sin embargo, no debe hacer eso si los datos son realmente grandes porque un proxy podría no ser capaz de manejarlos. Para datos grandes, la fragmentación es más segura.


Bueno, siempre puedes enviar un encabezado indicando el tamaño del archivo. Algo como response.addHeader("File-Size","size of the file");
E ignora el encabezado Content-Length.

La implementación del cliente tiene que ser ajustada para leer este valor, pero hey puedes lograr ambas cosas que quieras :)