IE8不会下载具有启用UAC的自定义mime /类型的文件

我在本地计算机上运行.net服务(Windows 7 x64,IE8,.net 3.5,C#),它将文件返回给浏览器以响应用户操作。 使用firefox或chrome,文件正确下载,我们的应用程序通过自定义mime类型启动,一切都很好。

但是,使用IE8,我收到一个“无法从中下载文件的对话框。无法打开此网站。请求的网站不可用或无法找到。请稍后再试”。

使用fiddler,我validation了IE确实从服务接收了有效负载。

如果我关闭UAC,IE会下载该文件并启动相关的应用程序。

关闭UAC不是一个可行的解决方案,因为我们的客户将启用它。

如何让IE8在启用UAC的情况下启动相关应用程序?

编辑:

在使用此处所述的编程ID重新注册mime类型后,我可以让IE打开显示“打开或保存”对话框,以便在第二次从地址栏请求链接时。 为什么它第一次不起作用?

我今天能够解决这个问题。 事实certificate,代码隐藏是将响应的CacheControl属性设置为HttpCacheability.NoCache 。 删除该行代码解决了这个问题。 修复程序的另一半是使用ProgId正确注册mime类型和文件扩展名。

我删除了对content-disposition: attachment; filename=xxx的回应content-disposition: attachment; filename=xxx content-disposition: attachment; filename=xxx和字符串数据的二进制写入。 IE正确显示了“打开”或“保存”对话框,即使mime嗅探报告文件为text / html(实际上应该是text / plain)。

我添加了内容类型标题并重新测试,然后是nosniff选项并重新测试,最后是缓存控件。 在每次测试之间,我重新启动VM以确保它是一个原始测试环境(即,没有缓存或预加载)。 只有缓存控制行以负面方式影响了行为。

来自MSDN

如果Internet Explorer知道指定的Content-Type且没有Content-Disposition数据,则Internet Explorer会执行“MIME嗅探”,扫描文件的前200个字节以确定文件结构是否与任何已知的MIME类型匹配。 有关MIME嗅探的详细信息,请参阅Internet Explorer中的MIME类型检测。 如果MIME嗅探器检测到Internet Explorer已知的MIME类型,并且该文件尚未由mimefilter加载,则Internet Explorer会在将文件放入本地浏览器缓存中之前设置该文件扩展名。

最后,如果没有Content-Type或Content-Disposition数据,并且MIME嗅探器无法识别已知的MIME类型,则文件扩展名将设置为与用于下载文件的URL相同的扩展名。

如果文件在HTTP标头中标记为“content-disposition = attachment”,则Internet Explorer会将URL中的文件名视为final,并且在将其放入缓存之前不会将其重命名。

content-disposition =附件是解决方案吗?!?

/ Erling Damsgaard DNS-IT ApS

我们在www.Qiqqa.com的ClickOnce部署中嵌入了同样的问题。 我怀疑它与IE获取应用程序/八位字节流时​​所做的“MIME类型嗅探”有关 – 我想保护用户免受恶意攻击。

无论如何,为了解决这个问题,我们将.deploy文件的mime类型更改为text / plain – 显然不理想,但同时,我不知道我们可能在我们的文件中有.deploy文件的情况用户将在ClickOnce外部浏览的服务器。

需要确保在“no-cache”之前标题中出现“no-store”。 看到这篇文章: http : //blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx

对我来说,这个问题的解决方案正在改变

 Response.ContentType =“application / vnd.ms-excel”;

 Response.ContentType =“text / csv”;