J'ai trouvé le code asp.net suivant très utile pour servir des fichiers à partir d'une base de données:
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Cela permet à l’utilisateur d’enregistrer le fichier sur leur ordinateur, puis de décider de son utilisation, au lieu que le navigateur essaie de l’utiliser.
Quelles autres choses peuvent être faites avec l'en-tête de réponse content-disposition?
Notez que RFC 6266 remplace les RFC référencées ci-dessous. La section 7 décrit certaines des préoccupations liées à la sécurité.
L'autorité sur l'en-tête de disposition de contenu est RFC 1806 et RFC 2183. Des personnes ont également conçu le piratage de disposition de contenu. Il est important de noter que l'en-tête content-disposition ne fait pas partie de la norme HTTP 1.1.
La norme HTTP 1.1 ( RFC 2616 ) mentionne également les éventuels effets indésirables de la disposition du contenu sur la sécurité:
15.5 Problèmes liés à la disposition du contenu
RFC 1806 [35], à partir duquel le souvent implémenté Content-Disposition
(voir section 19.5.1). L’en-tête de HTTP est dérivé, possède un certain nombre de
considérations de sécurité sérieuses . Content-Disposition ne fait pas partie de
le standard HTTP, mais puisque c'est largement mis en œuvre, nous sommes
documenter son utilisation et les risques pour les réalisateurs. Voir la RFC 2183 [49]
(qui met à jour RFC 1806) pour plus de détails.
Eh bien, il semble que l'en-tête Content-Disposition ait été créé à l'origine pour le courrier électronique, pas pour le Web. ( Lien vers la RFC pertinente .)
Je devine que les navigateurs Web peuvent répondre à
Response.AppendHeader("content-disposition", "inline; filename=" + fileName);
lors de la sauvegarde, mais je ne suis pas sûr.
Reportez-vous à la RFC 6266 (Utilisation du champ d'en-tête Content-Disposition dans le protocole HTTP (Hypertext Transfer Protocol)) http://tools.ietf.org/html/rfc6266
Pour les utilisateurs asp.net, le framework .NET fournit une classe permettant de créer un en-tête de disposition de contenu: System.Net.Mime.ContentDisposition
Utilisation de base:
var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "myFile.txt";
cd.ModificationDate = DateTime.UtcNow;
cd.Size = 100;
Response.AppendHeader("content-disposition", cd.ToString());
Cet en-tête est défini dans RFC 2183 , ce serait donc le meilleur endroit pour commencer à lire.
Les valeurs autorisées sont celles enregistrées auprès de l'IANA (Internet Assigned Numbers Authority); leur registre de valeurs devrait être considéré comme la source définitive.
Pensons que cet article de la Base de connaissances sur la section support de Microsoft est lié à la discussion qui suit Comment faire apparaître une boîte de dialogue de téléchargement de fichier pour un type MIME connu }