我有一个傻瓜。在我们的测试服务器上安装了CF11。做了一些回归测试并遇到了问题。我有一个.cfm,可以将信息下载到excel。它在CF10(和之前的版本)中渲染得很好。在CF11中,它在IE10和FireFox中渲染得很好。然而,它在IE8中失败,因为我们的大多数用户仍然需要使用IE8,这是一个显而易见的事。
以下是设置excel转储的代码 - 页面名称为show_table.cfm:
<cfif IsDefined('URL.ExcelDump')>
<cfheader name="Content-Disposition" value="filename=#Session.utilstablename#.xls">
<cfcontent type="application/vnd.ms-excel">
</cfif>
我已经关闭了这些行 - 以下错误没有变化:
<META http-EQUIV="Pragma" CONTENT="no-cache">
<META http-EQUIV="cache-control" CONTENT=" no-store,no-cache, must-revalidate">
这是我期望发生的事情 - IE10做了类似的打开/保存面板:
这是IE8中发生的事情:
请注意,失败的文件名与尝试进行下载的.cfm页面相同。就像它没有看到cfheader将它设置为预期的名称(对于这个特定的下载应该是er_quality_items_view.xls)。
任何智慧的话语? IIS中是否有一个设置(我们使用8)可能会影响这种行为?
答案 0 :(得分:3)
根据MVP Erik Law(下面的链接),特定于您的问题是某些IE版本的行为:
&#34;如果用户尝试通过HTTPS连接下载文件,则任何阻止缓存的响应标头都会导致文件下载过程失败。&#34;
因此,它实际上提供了缓存控制标头令牌,例如 no-cache &amp; 无商店, Vary 标头或臭名昭着的 Pragma no-cache 标头,导致浏览器在超过ssl时中止下载。假设Erik Law的博客链接经得起时间的考验,您可以通过以下链接阅读所有相关信息。
因此,站点范围的CFHEADER缓存设置通常可能很好,但是在下载文件时,您希望清除所有这些内容。尝试将这个小宝石置于下载CFML代码之上:
&lt; cfset getPageContext()。getResponse()。reset()/&gt;
并再次测试。
http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx
https://groups.google.com/forum/?fromgroups#!topic/openbd/ke6cSVHXMfM
答案 1 :(得分:0)
对于这个答案,我已经看高了和低了!我想说声谢谢,因为它帮助我解决了与链接和 Microsoft Office(Word、Powerpoint、Excel)相关的问题。如果用户单击 Word 中的链接并且它是一个 Https 网站并且它使用 cfheader 在页面上提供 pdf 文件,它将失败并显示“无法打开 https://....pdf。无法打开指定的文件。”如果您直接转到该页面或从 Outlook 中单击它,则效果很好。
在 Edge 上,我右键单击页面并选择“检查”以查看页面代码源。
当使用 cfheader 来提供文件时,默认设置为:
kable(data.frame(a = 1, b = 2)) %>%
row_spec(0, background = "yellow")
无缓存是它失败的原因。要覆盖此设置,请执行前 3 行,如下所示:
Cache-Control: no-cache
..
Pragma: no-cache
在 Edge 上,我右键单击页面并选择“检查”以再次查看页面代码源,现在可以看到:
<cfset getPageContext().getResponse().reset() />
<cfheader name="Cache-Control" value="max-age=360">
<cfheader name="Pragma" value="cache">
<cfheader name="Content-Disposition" value="inline; filename=#GetResults.report_file_nm1#" >
<cfcontent type="application/pdf" file="#myfilelocation#" deletefile="no">
有关我在下面尝试解决的问题的更多详细信息:
再次感谢!这对我有用。