सर्वर से प्राप्त डुप्लिकेट हेडर


119

सर्वर से प्राप्त डुप्लिकेट हेडर

सर्वर की प्रतिक्रिया में डुप्लिकेट हेडर थे। यह समस्या आम तौर पर एक गलत वेबसाइट या प्रॉक्सी का परिणाम है। केवल वेबसाइट या प्रॉक्सी व्यवस्थापक ही इस समस्या को ठीक कर सकते हैं।

त्रुटि 349 (शुद्ध :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): कई अलग-अलग सामग्री-विवाद हेडर प्राप्त हुए। यह HTTP प्रतिक्रिया विभाजन के हमलों से बचाने के लिए अस्वीकृत है।

मुझे क्रोम में pdf निर्यात करते समय यह त्रुटि मिली।

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

इसे कैसे ठीक करें?


18
मैंने यह भी पाया है कि फ़ाइल नाम में अल्पविराम उस त्रुटि (केवल क्रोम में) देगा। मैं सोच रहा हूं कि यह बताने का कोई तरीका होना चाहिए कि फ़ाइल नाम = "abc, xyz.pdf" वैध है। मुझे लगता है कि हम "" को कुछ और के साथ बदल सकते हैं, लेकिन मैं फ़ाइल नाम को उसी तरह संरक्षित और वापस करना चाहता हूं जैसा वह है। अन्य ब्राउज़रों में से कोई भी (IE, फ़ायरफ़ॉक्स, सफारी, ओपेरा) मैंने इस मुद्दे की कोशिश की है।
cusman 21

29
तो वहाँ एक तरीका है कि यह अभी भी फ़ाइल नाम में अल्पविराम है। बस फ़ाइलनाम उद्धृत करना होगा। Response.AddHeader("content-disposition", "attachment; filename=\"" + FileNameWithCommas + "\"");
21

3
धन्यवाद @cusman यह वास्तव में मेरी समस्या थी - फ़ाइल नाम में एक अल्पविराम और केवल क्रोम के साथ एक मुद्दा था।
पीटरका

जवाबों:


236

यह थोड़ा पुराना था, लेकिन Google रैंकिंग में उच्च था, इसलिए मुझे लगा कि मैं क्रोम, पीडीएफ डिस्प्ले, सर्वर से प्राप्त डुप्लिकेट हेडर से उत्तर में फेंक दूंगा।

मूल रूप से मेरी समस्या यह भी थी कि फ़ाइल नाम में कॉमा था। उन्हें हटाने के लिए अल्पविराम पर एक प्रतिस्थापन करें और आपको ठीक होना चाहिए। वैध फ़ाइल नाम बनाने का मेरा कार्य नीचे है।

    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;
    }

22
लिंक किए गए उत्तर पर @roryok की टिप्पणी से, फ़ाइल नाम के आसपास के उद्धरण मुद्दों को ठीक करना चाहिए। और वास्तव में कल्पना यह कहती दिखती है कि फ़ाइलनाम को उद्धृत किया जाना चाहिए।
ताओको

उद्धरण चिह्न एक सहायता (और जोड़ा जाना चाहिए) होगा, लेकिन इस फ़ंक्शन में गैर-मान्य वर्णों को अलग करने का अतिरिक्त लाभ है, इसलिए आप अंत में एक मित्रतापूर्ण नाम बनाते हैं।
ब्रायन रॉबर्ट्स 19

@ यूनिसबारज़नीजी ने मेरे लिए काम किया, आपको फ़ाइल नाम के उद्धरण से बचने की आवश्यकता है
coffekid

3
इससे मेरा काम बनता है! फ़ाइलनामों में कॉम और रिक्त स्थान अच्छे विचार नहीं हैं!
ह्यूगो

क्यों .Replace(";", "").Replace(",", "")जब पहले से ही रेगुलर एक्सप्रेशन से द्वारा की जगह? ;,अपने RegEx पैटर्न में जोड़ें :string invalidReStr = string.Format(@"[{0};,]+", invalidChars); string replace = Regex.Replace(name, invalidReStr, "_");
SBF

97

सर्वर चाहिए फ़ाइल नाम को दोहरे उद्धरण चिह्नों में कहें, के रूप में @cusman और उनके जवाब में @Touko द्वारा उल्लेख किया है।

उदाहरण के लिए:

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

मैंने फ़ाइल के नाम के किसी भी दोहरे कोट्स को अंडरस्कोर से भी बदल दिया।
पीटर एल

मैंने भी ऐसा ही किया है, यहाँ भी अंडरस्कोर के साथ फ़ाइल नाम मिल रहा है।
जामशीर

5

मेरे लिए मुद्दा फ़ाइल नाम में नहीं बल्कि नीचे दिए गए अल्पविराम के बारे में था: -

Response.ok (StreamOutput, MediaType.APPLICATION_OCTET_STREAM_TYPE) .header ("सामग्री-स्वभाव", " अनुलग्नक, फ़ाइल नाम = your_file_name") निर्माण ();

मैंने गलती से लगाव के बाद अल्पविराम लगा दिया। इसे अर्धविराम के साथ अल्पविराम के स्थान पर हल किया गया।


3

बस इस तरह अपने फ़ाइल नाम के आसपास दोहरे उद्धरण चिह्नों की एक जोड़ी रखें:

this.Response.AddHeader ("सामग्री-स्वभाव", $ "अनुलग्नक; फ़ाइल नाम = \" {outputFileName} \ "");


लेकिन डाउनलोड किए गए फ़ाइल नाम में एक अंडरस्कोर है।
जामशीर

1

हेडर में फ़ाइल नाम के आसपास डबल उद्धरण एमडीएन वेब डॉक्स प्रति मानक है उद्धरणों को स्वीकार करने से फ़ाइल नाम में पात्रों से उत्पन्न होने वाली समस्याओं के लिए कई अवसर पैदा होते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.