IE8 не будет загружать файл с пользовательским MIME / типом с включенным UAC

У меня есть служба.net, работающая на локальном компьютере (Windows 7 x64, IE8, .net 3.5, C#), которая возвращает файл в браузер в ответ на действие пользователя. Используя Firefox или Chrome, файл загружается правильно, и наше приложение запускается через пользовательский тип MIME, и все в порядке.

Тем не менее, в IE8 я получаю диалоговое окно "невозможно загрузить файл с. Невозможно открыть этот интернет-сайт. Запрашиваемый сайт либо недоступен, либо не найден. Попробуйте позже".

Используя fiddler, я проверил, что IE получает полезную нагрузку от сервиса.

Если я отключаю UAC, IE загружает файл и запускает соответствующее приложение.

Отключение контроля учетных записей не является жизнеспособным решением, так как наши клиенты включат его.

Как я могу получить IE8 для запуска соответствующего приложения с включенным UAC?

РЕДАКТИРОВАТЬ:

После перерегистрации MIME-типа с программным идентификатором, как описано здесь, я могу заставить IE открыться, чтобы показать диалоговое окно "Открыть или Сохранить" в течение ВТОРОГО времени, когда ссылка запрашивается из адресной строки. Почему это не работает с первого раза?

5 ответов

Решение

Я смог решить эту проблему сегодня. Оказывается, что код был заданием CacheControl свойство ответа на HttpCacheability.NoCache, Удаление этой строки кода решило проблему. Другая половина исправления корректно регистрировала тип mime и расширение файла с помощью ProgId.

Я сократил ответ на просто content-disposition: attachment; filename=xxx и двоичная запись строковых данных. IE правильно отображал диалоговое окно "Открыть" или "Сохранить", даже несмотря на то, что mime sniff сообщал о файле как text / html (который действительно должен был быть text / plain).

Я добавил обратно заголовок типа контента и перепроверил, затем опцию nosniff, перепроверил и, наконец, элемент управления кешем. В промежутке между каждым тестом я перезагружал виртуальную машину, чтобы убедиться, что это была чистая среда тестирования (т. Е. Ничего не было кэшировано или предварительно загружено). Только линия контроля кеша негативно влияла на поведение.

Необходимо убедиться, что в вашем заголовке появляется "no-store" перед "no-cache". Смотрите этот пост: http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx

У нас была та же самая проблема, встроенная в наше развертывание ClickOnce http://www.qiqqa.com/. Я подозреваю, что это связано с "анализом MIME-типов", который IE делает, когда получает поток приложения / октет - я думаю, чтобы защитить пользователя от вредоносных программ.

В любом случае, чтобы решить эту проблему, мы изменили тип MIME наших файлов.deploy на text / plain - очевидно, не идеальный, но в то же время я не знаю сценария, в котором у нас может быть файл.deploy. сервер, который пользователь будет просматривать за пределами ClickOnce.

Из MSDN

Если Internet Explorer знает указанный тип содержимого и данных Content-Disposition нет, Internet Explorer выполняет "анализ MIME", сканируя первые 200 байтов файла, чтобы определить, соответствует ли структура файла каким-либо известным типам MIME. Для получения дополнительной информации о прослушивании MIME см. Определение типа MIME в Internet Explorer. Если MIME-снифф обнаруживает тип MIME, известный Internet Explorer, и файл не был загружен mimefilter уже, Internet Explorer устанавливает это расширение файла перед помещением файла в кэш локального браузера.

Наконец, если нет данных Content-Type или Content-Disposition, и снифф MIME не распознает известный тип MIME, расширение файла устанавливается равным тому же расширению, что и URL-адрес, используемый для загрузки файла.

Если файл помечен как "content-disposition=attachment" в заголовке HTTP, Internet Explorer обрабатывает имя файла из URL-адреса как окончательное и не переименовывает его перед помещением в кэш.

content-disposition=attachment это что решение?!?

/ Эрлинг Дамсгаард DNS-IT ApS

Для меня решение этой проблемы менялось

Response.ContentType = "application/vnd.ms-excel";

в

Response.ContentType = "text/csv";
Другие вопросы по тегам