IIS 7 Dynamic Compression: сделает ли это заголовок Content-Length непредсказуемым?

Использование .NET 4.0 в IIS 7.5 в Windows 2008 R2.

Я хотел бы вывести двоичный контент, представляющий различные типы документов (изображения, PDF, файлы Office и т. Д.). Предположим, что весь контент уже находится в MemoryStream, я хотел бы вывести его:

Response.Clear();
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileNameSaveAs));
Response.AddHeader("Content-Length", memoryStr.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.OutputStream.Write(memoryStr.ToArray(), 0, (int) memoryStr.Length);
Response.Flush();

Приведенный выше код ненадежен. Часто случаются повреждения файлов. Клиенты, использующие различные браузеры, иногда прерывают загрузку, иногда скачивают файл, который невозможно прочитать. Вероятность повреждения увеличивается с размером файла. Используя скрипач, мы обнаружили, что в заголовке ответа сообщается, что длина содержимого отличается от исходного размера файла. Поэтому для быстрого тестирования мы закомментировали строку Response.AddHeader ("Content-Length" ...), и проблема с повреждением исчезла.

Q1: эта проблема вызвана динамическим сжатием (по умолчанию включено в IIS7)?

Q2: Если ответ на Q1 положительный, то есть ли какое-нибудь элегантное решение, чтобы сообщить клиенту о Content-Length?

Q3: Удаление заголовка Content-Length, похоже, влияет на способность клиента сохранять файл как. Пример: «Content-Disposition» инициализируется с fileNameSaveAs = «One Two Three.pdf». При использовании Firefox при получении файла в диалоговом окне загрузки в качестве имени файла по умолчанию было выбрано значение «Один». Это нормальное следствие?

Заранее благодарю за любую помощь.


person Polymerase    schedule 13.05.2011    source источник


Ответы (1)


сделал больше тестов, прояснил несколько вещей, но технически неудовлетворительно.

А1. Причина не в динамическом сжатии IIS 7.5. Повреждение загрузки по-прежнему происходило независимо от того, отключены ли динамическое сжатие, статическое сжатие или и то, и другое. Как только строка Response.AddHeader ("Content-Length" ... закомментирована в коде, все проблемы с загрузкой исчезли.

A2. без понятия! Я действительно хотел бы знать.

A3. Это, вероятно, ошибка Firefox. Это не имеет ничего общего с заголовком Content-Length.

person Polymerase    schedule 16.05.2011