0

我有一个树桩。在我们的测试服务器上安装了 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 中发生的情况: ie8下载失败

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

有什么智慧之言吗?IIS 中是否有可能影响此行为的设置(我们使用 8)?

4

2 回答 2

3

根据 MVP Erik Law(以下链接),特定于您的问题的是某些版本的 IE 的行为:

“如果用户尝试通过 HTTPS 连接下载文件,任何阻止缓存的响应标头都会导致文件下载过程失败。”

因此,实际上是提供了Cache-Control标头令牌,例如no-cacheno-storeVary标头或臭名昭著的Pragma no-cache标头,它们导致浏览器在通过 ssl 时中止下载。假设 Erik Law 的博客链接经受住了时间的考验,您可以通过下面的链接阅读所有相关信息。

因此,站点范围的 CFHEADER 缓存设置通常可能很好,但在下载文件时您需要清除所有这些设置。尝试将这个小宝石放在下载的 CFML 代码上方:
<cfset getPageContext().getResponse().reset() />
并再次测试。

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

于 2014-11-21T03:28:51.003 回答
0

对于这个答案,我已经高高在上!我想说声谢谢,因为它帮助我解决了与链接和 Microsoft Office(Word、Powerpoint、Excel)相关的问题。如果用户单击 Word 中的链接并且它是 Https 网站,并且它使用 cfheader 在页面上提供 pdf 文件,它将失败并显示“无法打开 https://....pdf。无法打开指定的文件。” 如果您直接转到该页面或从 Outlook 中单击它可以正常工作。

在 Edge 上,我右键单击页面并选择“检查”以查看页面代码源。

使用 cfheader 提供文件时,默认情况下将其设置为:

Cache-Control: no-cache
..
Pragma: no-cache

无缓存是它失败的原因。要覆盖此设置,请执行前 3 行,如下所示:

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

在 Edge 上,我右键单击页面并选择“检查”以再次查看页面代码源,现在可以看到:

Cache-Control: max-age=360
..
Pragma: cache

关于我试图解决的问题的更多详细信息如下:

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?页=3

再次感谢!这对我有用。

于 2021-03-11T19:37:46.070 回答