【问题标题】:ColdFusion 11 cfheader not being passed correctly in IE 8ColdFusion 11 cfheader 未在 IE 8 中正确传递
【发布时间】:2014-11-13 18:58:18
【问题描述】:

我有一个笨蛋。在我们的测试服务器上安装了 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)?

【问题讨论】:

  • 我刚刚尝试取出 cfheader..FF 仍然可以正常渲染,但 IE8 仍然失败...
  • 这是在 SSL 后面吗? IE8 抱怨 no-cache 标头。尝试将缓存控制标头设置为私有并删除编译指示标头。
  • @abbottmw - 是的..这在 SSL 后面。我注释掉了两个元标记,没有任何区别。
  • 您可以使用Fiddler 之类的工具并查看响应标头以查看正在设置的标头吗?您可以进入 IIS 并查看为站点设置的 HTTP 标头并修改它们。 IE8 抱怨 SSL 下的任何无缓存标头。
  • 会尝试...但是如果没有无缓存记录,并且它仍然不会执行 cfcontent 到 excel,关于如何继续的任何建议?我曾尝试使用 JavaScript 例程导出到 excel,但没有比 CF 更成功...

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


【解决方案1】:

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

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

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

因此,站点范围的 CFHEADER 缓存设置通常可能很好,但在下载文件时您需要清除所有这些设置。尝试将这个小宝石放在您下载的 CFML 代码上方:

并再次测试。

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

【讨论】:

  • 这是互联网上帮助我解决问题的唯一一篇文章。谢谢!我在 ColdFusion 11 中遇到了一个问题,我为 Cache-Control 设置的 标记很容易被忽略并且无法正常工作。不是 100% 确定为什么会这样或为什么会这样,但确实如此!再次感谢!
【解决方案2】:

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

在Edge上,我右击页面,选择“Inspect”查看页面代码源。

使用 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?page=3

再次感谢!这对我有用。

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 2019-11-06
    • 2018-12-01
    • 2016-01-06
    • 2011-07-27
    • 1970-01-01
    • 2014-02-26
    • 2013-06-20
    相关资源
    最近更新 更多