Vom Server empfangene doppelte Header

119

Vom Server empfangene doppelte Header

Die Antwort vom Server enthielt doppelte Header. Dieses Problem ist im Allgemeinen das Ergebnis einer falsch konfigurierten Website oder eines falsch konfigurierten Proxys. Nur der Website- oder Proxy-Administrator kann dieses Problem beheben.

Fehler 349 (net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): Es wurden mehrere unterschiedliche Content-Disposition-Header empfangen. Dies ist nicht zulässig, um sich vor Angriffen zur Aufteilung der HTTP-Antwort zu schützen.

Ich habe diesen Fehler beim Exportieren als PDF in Chrome gefunden.

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();

Wie kann ich das beheben?

Purvesh Desai
quelle
18
Ich habe auch festgestellt, dass ein Komma im Dateinamen diesen Fehler ausgibt (nur in Chrome). Ich denke, es muss eine Möglichkeit geben, zu sagen, dass der Dateiname = "abc, xyz.pdf" gültig ist. Ich verstehe, dass wir das "," durch etwas anderes ersetzen können, aber ich möchte den Dateinamen so beibehalten und zurückgeben, wie er ist. Keiner der anderen Browser (IE, FireFox, Safari, Opera), die ich ausprobiert habe, hat dieses Problem.
Cusman
29
Es gibt also eine Möglichkeit, dass der Dateiname noch Kommas enthält. Ich muss nur den Dateinamen angeben. Response.AddHeader("content-disposition", "attachment; filename=\"" + FileNameWithCommas + "\"");
Cusman
3
Danke @cusman. Das war genau mein Problem - ein Komma im Dateinamen UND nur Chrome hatte ein Problem damit.
PeterKA
1
Mögliches Duplikat von Chrome, PDF-Anzeige,
Ian Kemp

Antworten:

236

Diese sind etwas alt, aber hoch im Google-Ranking, also dachte ich, ich würde die Antwort, die ich von Chrome gefunden habe, PDF-Anzeige, doppelte Header, die vom Server empfangen wurden, einwerfen

Grundsätzlich war mein Problem auch, dass der Dateiname Kommas enthielt. Ersetzen Sie Kommas, um sie zu entfernen, und es sollte Ihnen gut gehen. Meine Funktion zum Erstellen eines gültigen Dateinamens ist unten.

    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;
    }
Bryan Roberts
quelle
22
Aus dem Kommentar von @roryok in der verknüpften Antwort sollten Anführungszeichen um den Dateinamen die Probleme beheben. Und tatsächlich scheint die Spezifikation zu sagen, dass der Dateiname in Anführungszeichen gesetzt werden sollte.
Touko
Die Anführungszeichen wären eine Hilfe (und sollten hinzugefügt werden), aber diese Funktion hat den zusätzlichen Vorteil, dass ungültige Zeichen entfernt werden, sodass Sie am Ende einen freundlicheren Namen erstellen.
Bryan Roberts
@ Younisbarznji es hat bei mir funktioniert, Sie müssen den Anführungszeichen im Dateinamen entkommen
coffekid
3
Für mich geht das! Kommas und Leerzeichen sind in Dateinamen keine gute Idee!
Hugo
Warum, .Replace(";", "").Replace(",", "")wenn bereits durch RegEx ersetzt? Fügen Sie ;,Ihrem RegEx-Muster hinzu:string invalidReStr = string.Format(@"[{0};,]+", invalidChars); string replace = Regex.Replace(name, invalidReStr, "_");
SBF
97

Der Server sollte setzen doppelte Anführungszeichen um die Dateinamen, wie @cusman und @Touko in ihren Antworten erwähnt.

Beispielsweise:

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
Tomc
quelle
Ich habe auch doppelte Anführungszeichen im Dateinamen durch Unterstriche ersetzt.
Peter L
Ich habe das gleiche getan, hier auch Dateinamen mit Unterstrichen bekommen.
Jamsheer
5

Für mich ging es um ein Komma nicht im Dateinamen, sondern wie folgt: -

Response.ok (StreamingOutput, MediaType.APPLICATION_OCTET_STREAM_TYPE) .header ("Inhaltsdisposition", " Anhang, Dateiname = Ihr_Dateiname"). Build ();

Ich habe nach dem Anhängen versehentlich ein Komma gesetzt. Wurde durch Ersetzen des Kommas durch ein Semikolon behoben.

Deepak Agrawal
quelle
3

Setzen Sie einfach ein paar doppelte Anführungszeichen um Ihren Dateinamen wie folgt:

this.Response.AddHeader ("Inhaltsdisposition", $ "Anhang; Dateiname =" {outputFileName} ");

user3578181
quelle
Der heruntergeladene Dateiname enthält jedoch einen Unterstrich.
Jamsheer
1

Doppelte Anführungszeichen um den Dateinamen in der Kopfzeile sind der Standard pro MDN-Webdokument. Das Weglassen der Anführungszeichen bietet mehrere Möglichkeiten für Probleme, die sich aus Zeichen im Dateinamen ergeben.

Will Brownsberger
quelle