web-dev-qa-db-fra.com

En-têtes en double reçus du serveur

En-têtes en double reçus du serveur

La réponse du serveur contenait des en-têtes en double. Ce problème est généralement le résultat d'un site Web ou d'un proxy mal configuré. Seul le site Web ou l'administrateur de proxy peut résoudre ce problème.

Erreur 349 (net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): plusieurs en-têtes distincts de Content-Disposition reçus. Ceci est interdit pour se protéger contre les attaques par fractionnement de réponse HTTP.

J'ai trouvé cette erreur lors de l'exportation au format pdf en 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égler ceci?

102
Purvesh Desai

Celles-ci sont un peu anciennes mais occupent une place importante dans le classement Google. Je pensais donc pouvoir ajouter la réponse trouvée dans Chrome, affichage en PDF, en-têtes en double reçus du serveur

Fondamentalement, mon problème était aussi que le nom du fichier contenait des virgules. Faites un remplacement sur des virgules pour les supprimer et ça devrait aller. Ma fonction pour créer 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;
    }
204
Bryan Roberts

Le serveurDEVRAITmettre des guillemets doubles autour du nom du fichier, comme indiqué par @cusman et @Touko dans leurs réponses.

Par exemple:

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

Pour moi, le problème concernait une virgule non 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_fichier = votre_nom_fichier"). Build ();

J'ai accidentellement mis une virgule après l'attachement. Je l'ai résolu en remplaçant la virgule par un point-virgule.

5
Deepak Agrawal

Mettez juste une paire de guillemets autour de votre nom de fichier comme ceci:

this.Response.AddHeader ("Contenu-disposition", $ "pièce jointe; nom_fichier = \" {nomFichier_sortie}\"");

2
user3578181

Les guillemets doubles autour du nom de fichier dans l'en-tête sont les documents Web standard par MDN. L'omission des guillemets crée de multiples possibilités de problèmes liés aux caractères figurant dans le nom du fichier.

0
Will Brownsberger