【问题标题】:IE cannot download foo.jsf. IE was not able to open this internet site. The requested site is either unavailable or cannot be foundIE 无法下载 foo.jsf。 IE 无法打开此 Internet 站点。请求的站点不可用或找不到
【发布时间】:2011-02-17 20:47:30
【问题描述】:

我在 HTTPS (SSL) 主机上的 JSF Web 应用程序中提供文件下载(通常是 CSV 或 PDF)。它在大多数浏览器中都能正常工作,只有 IE7/8 会出现以下错误:

Internet Explorer 无法下载 foo.jsf。 Internet Explorer 无法打开此 Internet 站点。请求的站点不可用或找不到。请重试

我认为该错误与 JSF <h:commandLink> 标签与 IE 不兼容有关。

<h:commandLink value="Download" action="#{bean.download}" />

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: internet-explorer jsf https download


    【解决方案1】:

    这是一个典型的 MSIE 错误消息,当通过 HTTPS (SSL) 提供下载而响应标头设置为通过 no-cache 禁用浏览器缓存时。此问题与 JSF 无关。

    您需要放宽对浏览器缓存有影响的响应标头。它不应包含no-cache 指令。您可以将其设置为publicprivateno-store

    response.setHeader("Cache-Control", "public");
    response.setHeader("Pragma", "public");
    

    另见MS KB Q316431

    另外,如果您碰巧在 WebSphere Application Server 上运行,那么还要添加以下标头,以防止它在之后覆盖 Cache-Control 标头:

    response.setHeader("CookiesConfigureNoCache", "false");             
    

    另见IE cannot download files over SSL served by WebSphere

    【讨论】:

    • 我担心的是,该文件确实不是公开的,实际上不应该被缓存。
    • 改用Cache-Control: no-storeCache-Control: privatePragma: private 之一,这似乎是Internet Explorer 中仍然通过SSL 工作的最接近的方法。
    【解决方案2】:

    该问题与 jsf 无关,因为它只是将命令按钮转换为可在所有浏览器中访问的 html。我猜问题出在 abcBean.downloadCSV 中。您是否在 csv 文件上正确设置了内容类型?

    您能描述一下您的操作方法中发生了什么吗?

    【讨论】:

    • 内容类型几乎不是问题,因为它在其他浏览器中运行良好,并且 MSIE 无论如何都会忽略它(而是根据请求 URL 确定它,是的,多么令人惊讶......)。
    猜你喜欢
    • 2011-03-25
    • 2013-04-08
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2010-10-04
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多