Estaba descargando algo hoy y sé que solo tiene 1,8 GB, pero después de descargar 1,8/1,8 GB, sucedió lo más extraño. Chrome siguió descargando el archivo y la barra de progreso comenzó a mostrar la animación de carga y el tamaño del archivo siguió aumentando hasta que finalmente se detuvo después de 2,5 GB. Era un archivo de vídeo y dice que tiene 2,5 GB en mi disco y ni siquiera se reproduce. ¿Cómo sucede esto?
Respuesta1
Uno de los numerosos encabezados de respuesta que forman parte del protocolo HTTP es el Content-Length
encabezado. Básicamente, esto permite que el servidor le diga al cliente qué tan grandes son los datos que se envían en la respuesta. Chrome, como la mayoría de los navegadores sensibles, utiliza este encabezado para determinar qué mostrar para el tamaño total del archivo al descargar un archivo, además de calcular el progreso de descarga mostrado.
Sin embargo, hay dos problemas con esto:
- Los servidores no están estrictamente obligados a enviar este encabezado (solo es necesario en algunas circunstancias, no en todas). Es raro ver que los servidores no lo envían para cosas que son archivos reales en su disco local, pero no es inusual cuando se trata de contenido que se genera dinámicamente y se envía a medida que se genera (por ejemplo, archivos ZIP generados sobre la marcha mediante algún almacenamiento en la nube). servicios que permiten a los clientes descargar grupos de archivos todos a la vez) entran en esta categoría). Cuando esto sucede, Chrome mostrará el progreso de la descarga sin un porcentaje de finalización real, pero mostrará la barra de carga habitual para indicar que la descarga continúa.
- Por razones de compatibilidad, en los casos en los que el encabezado no es necesario, pero se envía de todos modos, debe tratarse como información de asesoramiento en lugar de ser una indicación estricta del tamaño de la respuesta. Hay demasiadas razones para enumerarlas aquí, pero el resultado es que al buscar (o descargar) un recurso, Chrome (y la mayoría de los navegadores) siguen obteniendo datos hasta que el servidor deja de enviarlos en estos casos porque no pueden confiar en eso. lo que dice el encabezado es exacto (de hecho, Chrome ocultará discrepancias menores entre el tamaño del archivo informado y el tamaño real del archivo al descargar
Lo que pasó en su caso fue resultado de ese segundo problema. Cuando alcanzó el tamaño de archivo "completo" y siguió obteniendo datos, Chrome finalmente pasó a mostrar cosas como lo hace cuando no sabe el tamaño del archivo que está descargando. Las dos posibles causas que me vienen a la mente para esto son un error (ya sea en el servidor o en algún sistema intermediario) o una actividad maliciosa (probablemente un ataque de intermediario o un servidor comprometido, si es este caso).
De cualquier manera, esto probablemente debería informarse a quien sea el propietario del sitio desde el que descargó el video, ya que cualquier caso probablemente sea una mala noticia para ellos.
Como nota al margen, también puede ver un comportamiento similar a este, pero sin aumentar el tamaño del archivo, si Chrome pudiera recuperar el archivo completo de la red más rápido de lo que podría escribirlo en el disco local.