我在 HTTPS (SSL) 主机上的 JSF Web 应用程序中提供文件下载(通常是 CSV 或 PDF)。它在大多数浏览器中都可以正常工作,只有 IE7/8 会出现以下错误:
Internet Explorer 无法下载 foo.jsf。Internet Explorer 无法打开此 Internet 站点。请求的站点不可用或找不到。请再试一次
我认为该错误与 JSF<h:commandLink>标签与 IE 不兼容有关。
<h:commandLink>
<h:commandLink value="Download" action="#{bean.download}" />
这是如何引起的,我该如何解决?
这是一个典型的 MSIE 错误消息,当通过 HTTPS (SSL) 提供下载而响应标头设置为通过no-cache. 此问题与 JSF 无关。
no-cache
您需要放宽对浏览器缓存有影响的响应标头。它不应该包含no-cache指令。您可以将其设置为public,private或no-store.
public
private
no-store
response.setHeader("Cache-Control", "public"); response.setHeader("Pragma", "public");
另请参阅 MS 知识库 Q316431。
此外,如果您碰巧在 WebSphere Application Server 上运行,那么还要添加以下标头,以防止它在Cache-Control之后覆盖标头:
Cache-Control
response.setHeader("CookiesConfigureNoCache", "false");