Usos de conteúdo-disposição em um cabeçalho de resposta HTTP
-
06-07-2019 - |
Pergunta
Eu encontrei o seguinte código asp.net para ser muito útil quando serve arquivos de um banco de dados:
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Isso permite que o usuário salvar o arquivo para o seu computador e então decidir como usá-lo, em vez do navegador tentar usar o arquivo.
O que outras coisas podem ser feitas com o cabeçalho de resposta Content-Disposition?
Solução
Note que RFC 6266 substitui a RFC relacionado abaixo. Secção 7 descreve algumas das preocupações de segurança relacionadas.
A autoridade sobre o cabeçalho Content-Disposition é RFC 1806 e RFC 2183. As pessoas têm também inventou content-disposition hacking. é importante notar que o cabeçalho de disposição do conteúdo não é parte do HTTP 1.1 padrão.
O HTTP 1.1 padrão ( RFC 2616 ) também menciona os possíveis efeitos colaterais de segurança de disposição do conteúdo:
Issues 15,5 Content-Disposition
RFC 1806 [35], a partir do qual a freqüência Content-Disposition implementado
(Ver secção 19.5.1) em cabeçalho HTTP é derivada, tem um número de muito
considerações de segurança graves. Content-Disposition não faz parte do
o padrão HTTP, mas uma vez que é amplamente implementado, we are documentando a sua utilização e riscos para implementadores. Veja RFC 2183 [49]
(Que atualiza RFC 1806) para mais detalhes.
Outras dicas
Bem, parece que o cabeçalho Content-Disposition foi originalmente criado para o e-mail, não a web. ( Link para RFC relevante.)
Eu estou supondo que os navegadores podem responder a
Response.AppendHeader("content-disposition", "inline; filename=" + fileName);
quando salvar, mas eu não tenho certeza.
Consulte a RFC 6266 (Uso do Conteúdo-Disposição cabeçalho campo no Hypertext Transfer Protocol (HTTP)) http://tools.ietf.org/html/rfc6266
Para usuários ASP.NET, o .NET framework fornece uma classe para criar um cabeçalho de disposição de conteúdo: System.Net.Mime.ContentDisposition
Uso básico:
var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "myFile.txt";
cd.ModificationDate = DateTime.UtcNow;
cd.Size = 100;
Response.AppendHeader("content-disposition", cd.ToString());
Este cabeçalho é definido na RFC 2183 , de modo que seria o melhor lugar para começar a leitura.
Os valores permitidos são aqueles registrados com a Internet Assigned Numbers Authority (IANA); sua registro de valores deve ser visto como a fonte definitiva.
Pensamento este artigo KB na seção de suporte Microsoft está relacionada com a discussão aqui Como aumentar uma caixa de diálogo de download de arquivo para um tipo mime conhecido