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


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.