Constructor de Cabecera HTTP Content-Disposition | filename y filename* a la vez
Compón una cabecera Content-Disposition conforme a RFC 6266 y RFC 5987. La herramienta empareja el filename ASCII con el filename* de RFC 5987 en una sola salida y avisa de los caracteres no ASCII o comillas que los generadores rápidos suelen ignorar. Pensada para desarrolladores backend que escriben endpoints de descarga.
💡 Sobre esta herramienta
Si pones un nombre con tildes o caracteres no latinos directamente en filename="informe.pdf", algunos clientes muestran texto ilegible en el diálogo de guardado. El parámetro filename solo admite ASCII, así que la solución es enviar también filename* con UTF-8 codificado en porcentajes según RFC 5987.
Esta herramienta escribe ambos a la vez. Tú introduces el nombre ASCII de respaldo y el nombre UTF-8, y ella genera algo como filename="informe.pdf"; filename*=UTF-8''informe%CC%81.pdf sin que codifiques byte a byte. También admite los parámetros opcionales size, creation-date y modification-date, y da formato a las fechas como HTTP-date (IMF-fixdate) para que la cabecera sea válida.
🧐 Preguntas frecuentes
¿Cómo funciona la codificación de filename*?
El valor sigue la forma charset'idioma'valor. Se usa UTF-8 como charset, el idioma se deja vacío y el nombre se convierte a bytes UTF-8; cada byte que no sea seguro se escribe como %XX en hexadecimal. Así viaja cualquier carácter sin ambigüedad.
¿Necesito filename y filename* los dos?
Para máxima compatibilidad, sí. Los clientes modernos leen filename* e ignoran filename; los antiguos recurren a filename. Enviar ambos evita tratar de forma especial a cada navegador.
¿Qué pongo en el campo ASCII?
Un nombre solo con caracteres ASCII, por ejemplo informe.pdf. Si pegas texto con tildes, la herramienta te avisa y conviene mover ese nombre al campo UTF-8.
¿Cuál es la diferencia entre attachment e inline?
attachment provoca el diálogo Guardar como; inline pide al navegador que muestre el contenido en la página. Usa inline para un PDF que quieras ver en pantalla y attachment para forzar la descarga.
¿Son obligatorios el tamaño y las fechas?
No. Si los dejas vacíos, se omiten en la cabecera. size solo acepta un entero no negativo.
📚 Por qué existen dos parámetros de nombre
La separación entre filename y filename* nace de la compatibilidad. La especificación original de Content-Disposition solo permitía ASCII en el token filename, así que no había forma portable de enviar Müller.pdf ni un nombre en japonés. RFC 5987 introdujo la forma charset'idioma'valor y RFC 6266 la incorporó a Content-Disposition como filename*.
El percent-encoding es el mismo concepto que ya conoces de las URL: los bytes que podrían confundir al receptor se sustituyen por %XX. Entender esta capa ayuda a depurar descargas: si ves %C3%A9 en una cabecera, son los dos bytes UTF-8 de la é. Mantener la etiqueta de idioma vacía es lo habitual, porque el nombre de un archivo no depende de un idioma hablado.