Скопійовані заголовки, отримані від сервера


119

Скопійовані заголовки, отримані від сервера

Відповідь сервера містила дублюючі заголовки. Ця проблема, як правило, є наслідком неправильно налаштованого веб-сайту чи проксі. Виправити цю проблему може лише веб-сайт або адміністратор проксі.

Помилка 349 (нетто: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): отримано кілька різних заголовків вмісту-диспозиції. Це заборонено для захисту від атак розбиття відповіді HTTP.

Я виявив цю помилку під час експорту в pdf у 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();

Як це виправити?


18
Я також виявив, що кома в імені файлу дасть цю помилку (лише в Chrome). Я думаю, що повинен бути спосіб сказати, що ім'я файлу = "abc, xyz.pdf" є дійсним. Я розумію, що ми можемо замінити "," чимось іншим, але я хочу зберегти та повернути ім'я файлу саме таким, яким воно є. Жоден з інших браузерів (IE, FireFox, Safari, Opera), у яких я не намагався виправити цю проблему.
— кусман

29
Таким чином, є спосіб дозволити йому все ж коми у назві файлу. Просто потрібно навести ім'я файлу. Response.AddHeader("content-disposition", "attachment; filename=\"" + FileNameWithCommas + "\"");
— кусман

3
Дякую @cusman. Це була саме моя проблема - кома у імені файлу ТА тільки у Chrome була проблема з цим.
— PeterKA

Відповіді:


236

Ці трохи старі, але були високо в рейтингу google, тому я подумав, що підкажу відповідь, знайдений із Chrome, pdf-дисплея, дублюючих заголовків, отриманих від сервера

В основному моя проблема також полягала в тому, що ім'я файлу містило коми. Зробіть заміну на коми, щоб видалити їх, і вам слід добре. Моя функція зробити дійсне ім’я файлу наведена нижче.

    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 до пов'язаної відповіді, цитати навколо назви файлу мають вирішити проблеми. І насправді специфікація, схоже, говорить, що ім'я файлу слід цитувати.
— Туко

Лапки допоможуть (і їх слід додати), але ця функція має додаткову перевагу, як викреслити недійсні символи, тому ви вдруге зробите дружніше ім’я.
— Брайан Робертс

@Younisbarznji це працювало для мене, вам потрібно уникнути цитат у назві файлу
— coffekid

3
Це працює для мене! Коми та пробіли не є гарною ідеєю у назви файлів!
— Гюго

Чому .Replace(";", "").Replace(",", "")при заміні вже RegEx? Додайте ;,до шаблону RegEx:string invalidReStr = string.Format(@"[{0};,]+", invalidChars); string replace = Regex.Replace(name, invalidReStr, "_");
— SBF

97

Сервер ДОЛЖЕН би поставити подвійні лапки навколо імені файлу, про що згадували @cusman та @Touko у своїх відповідях.

Наприклад:

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

Я також замінив будь-які подвійні лапки у назві файлу на підкреслення.
— Петро Л

Я зробив те ж саме, тут також отримуємо ім'я файлу з підкресленнями.
— Jamsheer

5

Для мене проблема полягала у комах не у назві файлу, а як показано нижче: -

Response.ok (streamingOutput, MediaType.APPLICATION_OCTET_STREAM_TYPE) .header ("content-disposition", " attachment, name file = your_file_name"). Build ();

Я випадково поставив кому після вкладення. Отримали це рішення, замінивши коску крапкою з комою.


3

Просто поставте пару подвійних лапок навколо імені вашого файлу, як це:

this.Response.AddHeader ("Вміст-диспозиція", $ "вкладення; ім'я файлу = \" {outputFileName} \ "");


Але в імені завантаженого файлу є підкреслення.
— Jamsheer

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.