Construtor de Cabeçalho HTTP Content-Disposition | filename e filename* juntos
Componha um cabeçalho Content-Disposition conforme RFC 6266 e RFC 5987. A ferramenta combina o filename ASCII com o filename* de RFC 5987 em uma única saída e avisa sobre caracteres não ASCII ou aspas que os geradores rápidos costumam ignorar. Feita para desenvolvedores back-end que escrevem endpoints de download.
💡 Sobre esta ferramenta
Se você colocar um nome com acentos direto em filename="relatório.pdf", alguns clientes mostram texto ilegível na caixa de salvar. O parâmetro filename só foi pensado para ASCII, então a correção é enviar também filename* em UTF-8 percent-encoded conforme RFC 5987. Quando os dois estão presentes, os clientes que entendem filename* o preferem e ignoram o filename, mantido como fallback para clientes antigos.
Esta ferramenta escreve os dois ao mesmo tempo. Você informa o nome ASCII de reserva e o nome UTF-8, e ela gera algo como filename="relatorio.pdf"; filename*=UTF-8''relat%C3%B3rio.pdf sem que você codifique byte a byte. Também trata os parâmetros opcionais size, creation-date e modification-date, formatando datas como HTTP-date (IMF-fixdate) para um cabeçalho válido.
🧐 Perguntas frequentes
Como funciona a codificação do filename*?
O valor segue a forma charset'idioma'valor. Usa-se UTF-8 como charset, o idioma fica vazio e o nome é convertido em bytes UTF-8; cada byte não seguro vira %XX em hexadecimal. Assim um ó vira %C3%B3.
Preciso de filename e filename* os dois?
Para máxima compatibilidade, sim. Clientes modernos leem filename* e ignoram filename; os antigos recorrem ao filename. Enviar os dois evita tratar cada navegador como caso especial.
O que coloco no campo ASCII?
Um nome só com caracteres ASCII, por exemplo relatorio.pdf. Se você colar texto acentuado, a ferramenta avisa e o ideal é mover esse nome para o campo UTF-8.
Qual a diferença entre attachment e inline?
attachment aciona a caixa Salvar como; inline pede ao navegador para exibir o conteúdo na página. Use inline para um PDF que queira mostrar na tela e attachment para forçar o download.
Tamanho e datas são obrigatórios?
Não. Em branco, são omitidos do cabeçalho. O campo size aceita apenas um inteiro não negativo.
📚 Por que existem dois parâmetros de nome
A separação entre filename e filename* é uma questão de compatibilidade retroativa. A especificação original do Content-Disposition só permitia ASCII no token filename, sem forma portável de enviar Müller.pdf ou um nome acentuado. A RFC 5987 introduziu a forma charset'idioma'valor, e a RFC 6266 a integrou ao Content-Disposition como filename*.
O percent-encoding é o mesmo mecanismo das URLs: bytes que poderiam confundir o destinatário são trocados por %XX. A etiqueta de idioma entre as duas aspas simples quase sempre fica vazia, pois o nome de um arquivo não depende de uma língua falada. Escolher UTF-8 em vez de ISO-8859-1 também importa, porque algumas implementações só decodificam a forma UTF-8.