HTTP缓存控制标头不适用于智能手机和平板电脑浏览器

时间:2013-09-19 04:52:38

标签: java jsp browser-cache

为智能手机,平板电脑和网络浏览器使用HTTP缓存控制标头。 当我在我的网站的移动版本上工作时,我遇到了一个问题。我的目标是告诉浏览器永远不要缓存我的网页。 我希望每个浏览器都能做到这一点 - Chrome,Firefox,Internet Explorer,Safari,iPhone的浏览器,Android手机的浏览器等。

我使用了以下HTTP缓存控制代码jsp,我使用<%@ include file =“myjsp.jsp”%>在其他jsps中包含jsp文件。它适用于Web浏览器,但不适用于移动浏览器。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
contentType="text/html;charset=UTF-8" isELIgnored = "false" %>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<%@taglib prefix="c2" uri="http://java.sun.com/jstl/core_rt"%>
<%@taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>
<%@ taglib prefix="sec"
uri="http://www.springframework.org/security/tags"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

 <%
response.setHeader("Cache-Control",
        "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Cache-Control",
        "post-check=0, pre-check=0', false");

response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

 %>

这些标题出了什么问题?

您的HTTP缓存控制标头在某些浏览器上工作而不是其他浏览器的问题是否存在同样的问题?

移动和桌面浏览器之间是否有任何明显的差异。

3 个答案:

答案 0 :(得分:0)

尝试将这些标头设置为html元标记。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

答案 1 :(得分:0)

首先,永远不建议将scriptlets保留在JSP中。从scriptlets中移除所有JSP,尽量使用JSTL或struts标记(优先于JSTL标记,而不是任何其他框架,如struts标记。)< / p>

第二件事是在JSP之上保留标记,使用以下元标记设置不缓存:

<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

有关详细信息,请查看herehere also

如果仍然无法解决您的问题,请告诉我。

答案 2 :(得分:0)

创建一个会话属性,让我们说“有效”,然后在匹配登录凭据之后,使用jsp中除null之外的任何值对其进行初始化。现在使用以下代码创建verify.jsp:

<%
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
if(session.getAttribute("valid")==null)
{
    out.println("<script>parent.location.href='login.jsp'</script>");
}
%>

现在只需在每个jsp页面上包含此jsp文件即可。别忘了写“session.invalidate();”在logout.jsp

希望它能运作.. !!!