最近的系统更新后,无法再在IE 11中下载文件

时间:2018-01-29 22:00:56

标签: asp.net internet-explorer iframe download

在过去几周的某个时候,MS推出了Windows 10上的IE 11更新,我认为这可能会干扰我在ASP.NET Web应用程序中在iframe中下载Excel和PDF文件的能力。

此问题仅适用于Windows 10上的某些版本的IE 11(我的计算机位于11.192.16299.0)。尚未向其他Windows版本报告。使用某些旧版IE 11操作的机器显然没有遇到这个问题。

我的应用程序有一个iframe,可以在其中加载我自己的内容。将页面加载到iframe并尝试在该iframe中下载文件后,用户看起来没有任何反应。检查控制台,我注意到以下两个警告,这些警告在应用程序中已存在很长时间了:

  

SEC7131:允许脚本和相同的原始访问权限,可能会破坏沙盒iframe的安全性。

     

DOM7011:此页面上的代码禁用了前后缓存。有关详细信息,请参阅:http://go.microsoft.com/fwlink/?LinkID=291337

检查网络流量,我可以看到文件请求熄灭,然后回复。响应具有以下标题:

  

缓存控制:无缓存,无存储
  内容 - 处理:附件;文件名= doc.pdf
  内容长度:97542
  内容类型:application / pdf
  日期:星期四,2018年1月25日18:27:37 GMT
  到期:-1
  Pragma:no-cache
  服务器:Microsoft-IIS / 10.0
  X-UA兼容:IE = Edge

这似乎是对我的正常要求。 Cache-Control被正确设置为no-cache,因为文档内容是动态生成的。

最后,我的代码隐藏中的代码启动了PDF的文件下载:

Public Sub DownloadPdf() Handles Pdf.Click
  Dim pdf As Byte() = GetPdf()

  With Response
    .Clear()
    .ClearHeaders()
    With .Cache
        .SetCacheability(HttpCacheability.NoCache)
        .SetNoStore()
        .SetExpires(Date.UtcNow.AddHours(-1))
        .SetMaxAge(New TimeSpan(0, 0, 30))
    End With
    .ContentType = "application/pdf"
    .AddHeader("Content-Disposition", "attachment; filename=doc.pdf")
    .AddHeader("Content-Length", pdf.Length.ToString)
    .BinaryWrite(pdf)
    .Flush()
    .End()
  End With
End Sub

Excel下载代码非常相似。可以假设GetPdf()正常工作,因为PDF在其他浏览器(Edge,Chrome,Firefox)中生成和下载。

我检查了Internet和本地Intranet安全区域的IE设置,配置似乎正常。允许文件下载,允许插件运行(或在某些情况下需要提示)。我甚至试图全面放松安全设置以确定可能导致我的问题的原因,但我没有运气。在开发控制台中,我将调试器设置为中断所有异常,但在文件下载过程中不会抛出任何异常。

我可以从其他网站查看PDF并下载文件,但我发现大多数测试网站似乎都在提供静态内容。另一方面,我的文件是动态创建的,下载过程似乎有点不同。

我的设置是否有明显问题?是否有任何安全或设置更改伴随最近的MS更新可能会干扰我的应用程序?我感谢任何和所有的帮助。谢谢你的期待。

1 个答案:

答案 0 :(得分:0)

在某些Windows 10版本(已确认1703和1709)中,IE安全设置已更改为阻止沙盒iframe文件下载。没有设置更改或解决方法,我发现除了从iframe中删除沙盒之外,还可以解决此问题。