Usos de disposición de contenido en un encabezado de respuesta HTTP
-
06-07-2019 - |
Pregunta
He encontrado que el siguiente código asp.net es muy útil al servir archivos de una base de datos:
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Esto permite al usuario guardar el archivo en su computadora y luego decidir cómo usarlo, en lugar de que el navegador intente usar el archivo.
¿Qué otras cosas se pueden hacer con el encabezado de respuesta de disposición de contenido?
Solución
Tenga en cuenta que RFC 6266 sustituye a los RFC mencionados a continuación. La Sección 7 describe algunos de los problemas de seguridad relacionados.
La autoridad en el encabezado de disposición de contenido es RFC 1806 y RFC 2183. La gente también ha ideado hackeo de disposición de contenido. Es importante tener en cuenta que el encabezado de disposición de contenido no forma parte del estándar HTTP 1.1.
El estándar HTTP 1.1 ( RFC 2616 ) también menciona los posibles efectos secundarios de seguridad de disposición de contenido:
15.5 Problemas de disposición de contenido
RFC 1806 [35], del cual a menudo Implementación de contenido implementado
(ver sección 19.5.1) el encabezado en HTTP es derivado, tiene una serie de muy
Consideraciones de seguridad serias. La disposición de contenido no es parte de
el estándar HTTP, pero como es ampliamente implementado, estamos
documentando su uso y riesgos para implementadores Ver RFC 2183 [49]
(que actualiza RFC 1806) para más detalles.
Otros consejos
Bueno, parece que el encabezado Content-Disposition se creó originalmente para el correo electrónico, no para la web. ( Enlace a RFC relevante .)
Supongo que los navegadores web pueden responder
Response.AppendHeader("content-disposition", "inline; filename=" + fileName);
al guardar, pero no estoy seguro.
Consulte RFC 6266 (Uso del campo de encabezado de disposición de contenido en el Protocolo de transferencia de hipertexto (HTTP)) http://tools.ietf.org/html/rfc6266
Para usuarios de asp.net, .NET Framework proporciona una clase para crear un encabezado de disposición de contenido: 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 encabezado se define en RFC 2183 , por lo que sería el mejor lugar para comenzar a leer.
Los valores permitidos son aquellos registrados con la Autoridad de Números Asignados de Internet (IANA); su registro de valores debe verse como la fuente definitiva.
Pensé que este artículo de KB en la sección de soporte de Microsoft está relacionado con la discusión aquí Cómo generar un cuadro de diálogo de descarga de archivos para un tipo mime conocido