A veces, el fiel medidor de progreso de descarga en su navegador (u otra aplicación) simplemente levanta las manos y renuncia a mostrar el tiempo de descarga restante. ¿Por qué a veces acelera el tiempo de descarga proyectado y, a veces, no informa todo junto?
La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación de sitios web de preguntas y respuestas impulsada por la comunidad.
La pregunta
El lector de superusuario Coldblackice quiere saber por qué su navegador no siempre arroja la suciedad:
De vez en cuando, al descargar un archivo en un navegador web, el progreso de la descarga no "conoce" el tamaño total del archivo, o qué tan avanzado está en la descarga; solo muestra la velocidad a la que se descarga, con un total de como "Desconocido".
¿Por qué el navegador no conocería el tamaño final de algunos archivos? ¿De dónde obtiene esta información en primer lugar?
¿Dónde de hecho?
Las respuestas
El colaborador de superusuario Gronostaj ofrece la siguiente información:
Para solicitar documentos de servidores web, los navegadores utilizan el protocolo HTTP. Es posible que conozca ese nombre en la barra de direcciones (puede que esté oculto ahora, pero cuando haga clic en la barra de direcciones, copie la URL y la pegue en algún editor de texto, verá
http://al principio). Es un protocolo simple basado en texto y funciona así:Primero, su navegador se conecta al servidor del sitio web y envía una URL del documento que desea descargar (las páginas web también son documentos) y algunos detalles sobre el navegador en sí ( Agente de usuario etc). Por ejemplo, para cargar la página principal en el sitio de SuperUser,
http://superuser.com/, mi navegador envía una solicitud que se ve así:GET / HTTP / 1.1 Anfitrión: superuser.com Conexión: mantener vivo Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, * / *; q = 0.8 Agente de usuario: Mozilla / 5.0 (Windows NT 6.1; WOW64) Aceptar codificación: gzip, deflate, sdch Aceptar-Idioma: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 Cookie: [removed for security] DNT: 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMTLa primera línea especifica qué documento debe devolver el servidor. Las otras líneas se llaman encabezados; se ven así:
Nombre del encabezado: valor del encabezadoEstas líneas envían información adicional que ayuda al servidor a decidir qué hacer.
Si todo va bien, el servidor responderá enviando el documento solicitado. La respuesta comienza con un mensaje de estado, seguido de algunos encabezados (con detalles sobre el documento) y finalmente, si todo está bien, el contenido del documento. Así es como se ve la respuesta del servidor SuperUser a mi solicitud:
HTTP / 1.1 200 OK Control de caché: público, edad máxima = 60 Tipo de contenido: texto / html; juego de caracteres = utf-8 Caduca: martes, 09 de julio de 2013 a las 07:27:20 GMT Última modificación: martes, 09 de julio de 2013 07:26:20 GMT Variar: * Opciones de X-Frame: SAMEORIGIN Fecha: martes, 09 de julio de 2013 07:26:19 GMT Longitud del contenido: 139672 <! DOCTYPE html> <html> [...snip...] </html>Después de la última línea, el servidor SuperUser cerró la conexión.
La primera línea (
HTTP / 1.1 200 OK) contiene la código de respuesta , en este caso es200 OK. Significa que el servidor devolverá un documento, según lo solicitado. Cuando el servidor no lo haga, el código será otra cosa: probablemente haya visto404 No encontradoy403 Prohibidotambién es bastante común. Luego siguen los encabezados.Cuando el navegador encuentra una línea vacía en la respuesta, sabe que todo lo que está más allá de esa línea es el contenido del documento que solicitó. Entonces en este caso
<! DOCTYPE html>es la primera línea del código de la página de inicio del superusuario. Si estuviera solicitando la descarga de un documento, probablemente serían algunos caracteres incoherentes, porque la mayoría de los formatos de documentos no se pueden leer sin un procesamiento previo.Volver a los encabezados. El más interesante para nosotros es el último,
Largancia de contenido. Informa al navegador cuántos bytes de datos debe esperar después de la línea vacía, por lo que básicamente es el tamaño del documento expresado en bytes. Este encabezado no es obligatorio y el servidor puede omitirlo. A veces, el tamaño del documento no se puede predecir (por ejemplo, cuando el documento se genera sobre la marcha), a veces los programadores perezosos no lo incluyen (bastante común en los sitios de descarga de controladores), a veces los sitios web son creados por novatos que no saben de tal encabezado.De todos modos, sea cual sea el motivo, puede faltar el encabezado. En ese caso, el navegador no sabe cuántos datos va a enviar el servidor, y esto muestra el tamaño del documento como desconocido , esperando que el servidor cierre la conexión. Y esa es la razón de los tamaños de documentos desconocidos.