Resumen

  • download permite que una página pida guardar el destino de un enlace y proponga un nombre; el servidor puede enviar instrucciones propias mediante HTTP.
  • Los registros de Mozilla y WHATWG muestran cómo el límite entre dos sitios complicó esa aparente cortesía.

El botón dice «Descargar informe.pdf» con una seguridad admirable. Apenas se pulsa, surge la pregunta que el botón había ocultado: ¿quién puso de verdad el nombre? La página dibujó el enlace. Otro servidor puede estar enviando los bytes. El navegador tendrá que crear el archivo en el ordenador. Es un pequeño concurso de rotuladores, celebrado a la velocidad de un clic.

El servidor llevaba años escribiendo etiquetas. El RFC 6266, de junio de 2011, fijó el uso HTTP de Content-Disposition. La palabra attachment orienta la respuesta hacia una descarga. filename ofrece un nombre; filename* admite una codificación apta para caracteres internacionales. El documento insiste en que el nombre es una sugerencia. El receptor debe recortar rutas, impedir que se escriba en lugares ajenos al destino permitido y tratar con cuidado las extensiones que podrían cambiar cómo se abre un archivo. Un servidor puede llamar «informe» a su paquete; el navegador sigue llevando las llaves del disco.

Después llegó la voz del enlace. El registro de funciones de Chromium sitúa a[download] en M14. Para el autor de una página, el atributo resolvía algo cotidiano: pedir al navegador que guardase el recurso en lugar de navegar hacia él. Además, el valor podía sugerir un nombre. Un archivo generado en la propia página o una imagen ofrecida como descarga ya tenían una puerta más amable que «clic derecho, guardar como».

La amabilidad tropezó con la frontera entre sitios. En un informe de error de Mozilla de 2013, alguien muestra un enlace a una imagen alojada fuera: Firefox la abre; Chrome la descarga. El informe esperaba que Firefox imitara el resultado. La respuesta de Mozilla lo considera una medida de seguridad necesaria y cierra el caso. El mismo texto HTML producía dos experiencias porque el archivo pertenecía a otro origen.

El debate de WHATWG abierto en abril de 2017 documentó una variante aún más jugosa. Firefox y Safari ignoraban el atributo en ese caso; Chrome descargaba, aunque desechaba el nombre propuesto por la página. Un editor explicó que el algoritmo de entonces permitía ambas salidas y planteó buscar una práctica común. Así aparecía una distinción que un botón bonito suele esconder: decidir si algo se guarda y decidir cómo se llama son poderes diferentes. También en 2017, WebKit anunció el soporte de download en Safari 10.1 para macOS, junto con la posibilidad de ofrecer archivos Blob creados en la página. La función avanzaba mientras se discutían sus bordes.

El estándar HTML vigente cuenta la historia con reglas: el atributo comunica intención y su valor recomienda un nombre; el nombre de Content-Disposition puede prevalecer. Al cruzar orígenes, la respuesta con attachment da al servidor del recurso un papel explícito y evita que una página provoque descargas sorprendentes de contenido ajeno. El navegador revisa finalmente el nombre y la ubicación del archivo.

El humilde enlace de descarga terminó pareciéndose a una mesa de negociación. La página trae el cartel, el servidor trae el paquete y el navegador firma el recibo. Si el nombre que aparece en Descargas sorprende, la sorpresa tiene una historia: se discutió quién podía escribirlo y quién debía cargar con las consecuencias de guardarlo.