在过去几周的某个时候,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更新可能会干扰我的应用程序?我感谢任何和所有的帮助。谢谢你的期待。
答案 0 :(得分:0)
在某些Windows 10版本(已确认1703和1709)中,IE安全设置已更改为阻止沙盒iframe文件下载。没有设置更改或解决方法,我发现除了从iframe中删除沙盒之外,还可以解决此问题。