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

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

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

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

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

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

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

EDIT:

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

Ответы [ 5 ]

5 голосов
/ 09 февраля 2010

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

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

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

1 голос
/ 11 сентября 2013

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

1 голос
/ 20 октября 2010

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

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

1 голос
/ 09 февраля 2010

От MSDN

Если Internet Explorer знает указанный тип содержимого и данные о расположении содержимого отсутствуют, 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

0 голосов
/ 01 февраля 2012

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

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

на

Response.ContentType = "text/csv";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...