A veces, el medidor de progreso de descarga fiel en su navegador (u otra aplicación) simplemente lanza sus manos al aire y deja de mostrar el tiempo de descarga restante. ¿Por qué a veces se limita el tiempo de descarga proyectado y a veces no se informa de todos juntos?

La sesión de Preguntas y Respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad.

La pregunta

El lector Superusuario Coldblackice quiere saber por qué su navegador no siempre mancha la suciedad:

Occasionally, when downloading a file in a web browser, the download progress doesn’t “know” the total size of the file, or how far along in the download it is — it just shows the speed at which it’s downloading, with a total as “Unknown”.

Why wouldn’t the browser know the final size of some files? Where does it get this information in the first place?

Donde de hecho

Las respuestas

El colaborador de SuperUser Gronostaj ofrece la siguiente perspectiva:

To request documents from web servers, browsers use the HTTP protocol. You may know that name from your address bar (it may be hidden now, but when you click the address bar, copy the URL and paste it in some text editor, you’ll see 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 (User-Agent, etc.). Por ejemplo, para cargar la página principal en el sitio SuperUser,http://superuser.com/, mi navegador envía una solicitud que se ve así:

GET / HTTP/1.1 Host: superuser.com Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) Accept-Encoding: gzip,deflate,sdch Accept-Language: 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 GMT

La primera línea especifica qué documento debe devolver el servidor. Las otras líneas se llaman encabezados; se ven así:

Header name: Header value

Estas líneas envían información adicional que ayuda al servidor a decidir qué hacer.

Si todo está 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 Superusuario a mi solicitud:

HTTP/1.1 200 OK Cache-Control: public, max-age=60 Content-Type: text/html; charset=utf-8 Expires: Tue, 09 Jul 2013 07:27:20 GMT Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Date: Tue, 09 Jul 2013 07:26:19 GMT Content-Length: 139672 [...snip...]

Después de la última línea, el servidor del Superusuario cierra la conexión.

La primera línea (HTTP/1.1 200 OK) contiene el código de respuesta, en este caso es200 OK. Esto significa que el servidor devolverá un documento, según lo solicitado. Cuando el servidor no logra hacerlo, el código será otra cosa: probablemente haya visto404 Not Foundy403 Forbidden Es bastante común, también. Luego siguen los encabezados.

Cuando el navegador encuentra una línea vacía en la respuesta, sabe que todo lo que pasa esa línea es el contenido del documento que solicitó. Así que en este caso es la primera línea del código de la página de inicio del Superusuario. Si estuviera solicitando un documento para descargar, probablemente serían algunos caracteres incomprensibles, porque la mayoría de los formatos de documentos son ilegibles sin un procesamiento previo.

Volver a los encabezados. El más interesante para nosotros es el último.Content-Length. 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 puede ser omitido por el servidor. 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 enviará el servidor y, por lo tanto, muestra el tamaño del documento comodesconocido, esperando que el servidor cierre la conexión. Y ese es el motivo de tamaños de documentos desconocidos.


¿Tienes algo que añadir a la explicación? Apague el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.

Los Mejores Consejos:
Comentarios: