【问题标题】:HTTP cache control headers not working for samrtphone and tablet browsersHTTP 缓存控制标头不适用于智能手机和平板电脑浏览器
【发布时间】:2023-03-23 21:30:01
【问题描述】:

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

我使用了以下 HTTP 缓存控制代码 jsp,我使用 在其他 jsps 中包含以下 jsp 文件。它适用于网络浏览器,但不适用于移动浏览器。

<%@ 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 缓存控制标头在某些浏览器上有效,而在其他浏览器上无效,您是否也遇到过同样的问题?

移动浏览器和桌面浏览器之间是否存在任何特定差异。

【问题讨论】:

  • 如果您将 scriptlet 代码移动到 servlet 过滤器中会更好,然后再试一次。我不会将此作为答案发布,因为我不确定 100% 是否会解决您的问题(但 IMO 应该)。
  • 我将 scriptlet 代码移动到 Servlet 过滤器,但仍然面临同样的问题。

标签: java jsp browser-cache


【解决方案1】:

首先,永远不建议将scriptlets 保留在JSP 中。从您的JSP 中删除所有scriptlets,并尽可能使用JSTL 或struts 标签(优先使用JSTL 标签而不是任何其他框架,如struts 标签)。

第二件事是在您的 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

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

【讨论】:

  • 嗨 Shailesh 这个解决方案不起作用我也尝试使用 Servlet 过滤器,它适用于网络浏览器,但不适用于移动浏览器
【解决方案2】:

尝试将这些标头设置为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" />

【讨论】:

    【解决方案3】:

    创建一个会话属性,让我们说“有效”,并在登录凭据匹配后使用 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 中

    希望它会工作..!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2012-08-07
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      相关资源
      最近更新 更多