132 votes

En-têtes dupliqués reçus du serveur

En-têtes dupliqués reçus du serveur

La réponse du serveur contenait des en-têtes en double. Ce problème est généralement dû à une mauvaise configuration du site Web ou du proxy. Seul l'administrateur du site Web ou du proxy peut résoudre ce problème.

Erreur 349 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION) : Plusieurs en-têtes Content-Disposition distincts reçus. Ceci n'est pas autorisé afin de se protéger contre les attaques de fractionnement de réponses HTTP.

J'ai trouvé cette erreur lors de l'exportation en pdf dans chrome.

Response.Buffer = false;
Response.ClearHeaders();
string ext = objProp.PACKAGEFILENAME.Substring(objProp.PACKAGEFILENAME.LastIndexOf("."));
string ext1 = ext.Substring(1);
Response.ContentType = ext1;
Response.AddHeader("Content-Disposition", "target;_blank,attachment; filename=" + objProp.PACKAGEFILENAME);
const int ChunkSize = 1024;
byte[] binary = objProp.PACKAGEDOCUMENT;
System.IO.MemoryStream ms = new System.IO.MemoryStream(binary);
int SizeToWrite = ChunkSize;

for (int i = 0; i < binary.GetUpperBound(0) - 1; i = i + ChunkSize)
{
    if (!Response.IsClientConnected) return;
    if (i + ChunkSize >= binary.Length) SizeToWrite = binary.Length - i;
    byte[] chunk = new byte[SizeToWrite];
    ms.Read(chunk, 0, SizeToWrite);
    Response.BinaryWrite(chunk);
    Response.Flush();
}
Response.Close();

Comment résoudre ce problème ?

254voto

Bryan Roberts Points 1124

Cette question est un peu ancienne, mais elle figurait en bonne place dans le classement Google. J'ai donc pensé que je pourrais y ajouter la réponse que j'ai trouvée auprès de Chrome, affichage des pdf, en-têtes dupliqués reçus du serveur

En fait, mon problème était aussi que le nom du fichier contenait des virgules. Faites un remplacement sur les virgules pour les supprimer et tout devrait bien se passer. Ma fonction pour faire un nom de fichier valide est ci-dessous.

    public static string MakeValidFileName(string name)
    {
        string invalidChars = Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()));
        string invalidReStr = string.Format(@"[{0}]+", invalidChars);
        string replace = Regex.Replace(name, invalidReStr, "_").Replace(";", "").Replace(",", "");
        return replace;
    }

106voto

tomc Points 216

Le serveur DEVRAIT mettre des guillemets autour du nom du fichier, comme mentionné par @cusman et @Touko dans leurs réponses.

Par exemple :

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");

6voto

user3578181 Points 1315

Il suffit de mettre une paire de guillemets autour de votre nom de fichier comme ceci :

this.Response.AddHeader("Content-disposition", $"attachment ; filename=\"{outputFileName}\"") ;

6voto

Deepak Agrawal Points 81

Pour moi, le problème concernait une virgule qui n'était pas dans le nom du fichier mais comme ci-dessous : -

Response.ok(streamingOutput,MediaType.APPLICATION_OCTET_STREAM_TYPE).header("content-disposition", " pièce jointe, nom de fichier \=votre_nom_de_fichier").build() ;

J'ai accidentellement mis une virgule après la pièce jointe. J'ai résolu le problème en remplaçant la virgule par un point-virgule.

4voto

Les guillemets doubles autour du nom de fichier dans l'en-tête sont la norme par Documents Web du MDN. L'omission des guillemets crée de multiples possibilités de problèmes découlant des caractères du nom de fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X