在IE 8中没有正确传递ColdFusion 11 cfheader

时间:2014-11-13 18:58:18

标签: coldfusion internet-explorer-8 coldfusion-11

我有一个傻瓜。在我们的测试服务器上安装了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做了类似的打开/保存面板: firefox works

这是IE8中发生的事情: ie8 download fail

请注意,失败的文件名与尝试进行下载的.cfm页面相同。就像它没有看到cfheader将它设置为预期的名称(对于这个特定的下载应该是er_quality_items_view.xls)。

任何智慧的话语? IIS中是否有一个设置(我们使用8)可能会影响这种行为?

2 个答案:

答案 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">

有关我在下面尝试解决的问题的更多详细信息:

https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-mso_win10-mso_o365b/cannot-open-https-hyperlinks-to-pdf-documents-from/7262cd15-9d42-436b-9d0a-074882d25773?page=3

再次感谢!这对我有用。