1. Antecedentes:
- Problemas de conexión persistente: Para conexiones no persistentes, el navegador puede definir los límites de la entidad solicitante o de respuesta según si la conexión está caída o no; Para conexiones continuas, este enfoque obviamente no funciona. A veces, aunque ya he enviado todos los datos, el navegador no sabe si llegarán nuevos datos por la conexión abierta, así que simplemente espera.
- Resolver con longitud de contenido: Calcula la longitud de la entidad y indica a la otra parte a través de la cabeza. El navegador puede saber que la entidad de respuesta está sobre por la información de longitud de la Longitud de Contenido
- Nuevo problema con la longitud del contenido: Dado que el campo longitud del contenido debe reflejar realmente la longitud de la entidad, la longitud es desconocida para contenido generado dinámicamente hasta que se crea el contenido. En este momento, para obtener la longitud con precisión, solo puedes abrir un búfer lo suficientemente grande y esperar a que se genere todo el contenido antes de calcular. Sin embargo, esto requiere más sobrecarga de memoria por un lado y, por otro, hará que el cliente espere más.
- Necesitamos un nuevo mecanismo que no dependa de la longitud del encabezado y que conozca los límites de las entidades: Transfer-Encoding: chunked.
2. Codificación de transferencia (fragmentada)
- Transfer-Encoding es un campo de cabecera HTTP (campo de cabecera de respuesta), que literalmente significa "codificación de transferencia". La última especificación HTTP define solo un tipo de transporte de codificación: fragmentado.
- La codificación de transferencia por fragmentos es un mecanismo de transferencia de datos en el Protocolo de Transferencia de Hipertexto (HTTP) que permite dividir los datos HTTP enviados por un servidor web al cliente en múltiples partes. La codificación por transporte por bloques solo está disponible en el protocolo HTTP versión 1.1 (HTTP/1.1).
- Los datos se desglosan en una serie de bloques y se envían en uno o más fragmentos para que el servidor pueda enviar datos sin conocer previamente el tamaño total del contenido enviado.
Métodos específicos
- Después de añadir Transfer-Encoding: chunked al encabezado, significa que el paquete está en chunk. En este caso, las entidades del paquete deben transmitirse en una serie de bloques.
- Cada fragmento contiene el valor de longitud hexadecimal y los datos, y el valor de longitud es exclusivo de una línea, y la longitud no incluye el CRLF al final de ella, ni el CRLF al final de los datos fragmentados.
- El valor de la longitud del último fragmento debe ser 0, y los datos correspondientes del fragmento no tienen contenido, lo que indica el final de la entidad.
asp.net Código básico de prueba:
|