`

控制 Web 缓存

    博客分类:
  • JSP
阅读更多
控制 Web 缓存


假设两个并发用户(用户 A 和用户 B)正试图使用基于 Web 的界面更新同一段数据。 假定用户 A 首先提交了更改的信息,随后应用程序将此信息存储到数据库中。 此时,用户 B 很有可能在他的 Web 浏览器中看到的是陈旧数据,且对此数据的更改可能覆盖用户 A 所做的修改。即使应用程序禁止并发用户访问同一数据,但如果用户单击浏览器的“后退”按钮,某个用户仍然可以看到陈旧内容。 如果应用程序开发人员忽略这些问题,它们可能导致信息不一致或数据丢失。

在以下各部分中,我概述了几个确保所提供内容的新鲜性的策略,从而避免出现陈旧数据问题。

使用 No-Cache 头部 为了尽量减少网络通信量,Web 浏览器和代理必须缓存静态页面、JavaScript、CSS 文件和像。 而缓存动态内容可能产生不良的负面影响,尤其是当 Web 窗体包含从数据库中提取的数据时。

幸运的是,使用分别由 HTTP/1.0 和 HTTP/1.1 标准定义的“Pragma:no-cache”和“Cache-Control:no-cache”头部可以很方便地禁用 HTTP 缓存。 例如,可以使用一个简单的过滤器设置这两个头部:



package caches;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class NoCacheFilter implements Filter {
    private FilterConfig config;

    public void init(FilterConfig config)
            throws ServletException {
        this.config = config;
    }

    public void doFilter(ServletRequest request,
            ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse
            = (HttpServletResponse) response;
        httpResponse.addHeader("Pragma", "no-cache");
        httpResponse.addHeader("Cache-Control", "no-cache");
        chain.doFilter(request, response);
    }

    public void destroy() {
    }

}


可以在应用程序的 web.xml 文件中为所有 JSP 页面、JSP 页面的子集或只为使用 JSF 和 ADF Faces 的网页配置此过滤器,如以下示例演示:


<filter>
    <filter-name>NoCacheFilter</filter-name>
    <filter-class>caches.NoCacheFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>NoCacheFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>


可以根据在应用程序中更新数据的方式修改此过滤器以设置其他 Cache-Control 头部以及 Age、Date、Expires 和 Last-Modified。 有关这些头部的更多详细信息,请参阅 HTTP 规范。
分享到:
评论

相关推荐

    webapi接口缓存组件

    4. 缓存注入:在WebAPI控制器或操作方法上添加特性(Attribute),标记哪些接口需要启用缓存功能。这样,每次调用这些接口时,都会先检查缓存,若命中则返回缓存结果,否则执行业务逻辑并保存响应到缓存。 三、使用...

    web 缓存

    在IT行业中,Web缓存是一种优化网页加载速度和减少服务器压力的重要技术。它涉及到浏览器缓存、CDN缓存、代理服务器缓存等多个层面。本文将深入探讨Web缓存的基本概念、工作原理以及如何防止静态资源非正常缓存的...

    基于Spring的Web缓存

    总的来说,基于Spring的Web缓存涉及到Spring框架的缓存抽象、注解驱动的缓存逻辑、Maven依赖管理和实际缓存实现的选择与配置。理解并熟练掌握这些知识点,将有助于构建高性能、低延迟的Web应用。开发者需要考虑缓存...

    JAVA_WEB_缓存技术

    然而,实际的Java Web缓存解决方案,如使用EhCache、Redis或Spring Cache等,通常会提供更复杂的功能,包括缓存失效策略、分布式缓存支持、缓存同步等。这些高级特性可以进一步提升系统的性能和可扩展性,并且简化...

    J2EE WEB缓存技术详解.doc

    标题和描述中的“J2EE WEB缓存技术详解”指向了一篇关于在Java Web应用程序中使用缓存技术的深入分析文章。文章由作者夏俊于2011年撰写,主要探讨了在处理大量数据时,如何通过实施缓存策略来优化系统性能,特别是...

    web项目页面缓存清除,不用每次刷新浏览器

    在Web开发中,页面缓存是一个重要的概念,它涉及到用户浏览网页时的性能优化和更新体验。当浏览器加载一个网页后,为了加快后续访问速度,会将页面的静态资源(如HTML、CSS、JavaScript文件、图片等)存储在本地缓存...

    webapi接口缓存组件.rar

    在这个场景中,"webapi接口缓存组件.rar"是一个压缩包,包含了实现Web API接口缓存功能的相关代码。缓存是提升应用程序性能的关键技术,它减少了对数据库或其他耗时资源的重复访问,降低了服务器负载。 在描述中...

    Web搜索与Web缓存的若干关键问题研究.rar

    《Web搜索与Web缓存的若干关键问题研究》是一份深入探讨互联网技术核心领域的文档,主要聚焦于两个关键环节:Web搜索和Web缓存。在信息化时代,这两者对于提升用户体验、优化网络性能以及保障信息获取效率至关重要。...

    web缓存

    Web缓存是网络技术中的一个重要概念,主要用于提高数据访问速度,减少网络带宽消耗,以及降低服务器负载。在Web应用程序中,缓存机制扮演着关键角色,尤其在高并发、大数据量的场景下,它的作用更为显著。本文将深入...

    面向站长和网站管理员的Web缓存加速指南.rar

    这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中。为了简要起见,某些实现方面的细节被简化或省略了。如果你更关心细节实现则完全不必耐心看完本文,后面参考...

    基于AOP的智能web缓存框架.pdf

    ### 基于AOP的智能Web缓存框架 #### 概述 随着互联网技术的飞速发展,Web应用程序的需求量急剧增加,这对服务器的处理能力提出了更高的要求。为了提高Web应用系统的性能,缓存技术成为了优化用户体验的重要手段之...

    Http页面缓存机制

    Cache-Control 是一种控制浏览器缓存的规则,它可以控制浏览器缓存的时长和频率。 Cache-Control 规则可以设置缓存的时长,例如 Cache-Control: max-age=3600,可以设置缓存的时长为一小时。 Etag 是一种控制...

    ASP_NET中Web页面缓存技术探讨

    可以通过以下两种方式来控制页面缓存: - **编程方式**:通过操作`HttpCachePolicy`类来定制缓存策略。 - **使用指令**:在页面顶部添加`@ OutputCache`指令来配置缓存策略,例如: ```html ``` 这里,`...

    web浏览器-缓存详解

    总结,浏览器缓存是提高Web应用性能的重要手段,理解其工作原理和控制方式,能帮助开发者构建更高效、响应更快的网站。通过合理利用HTTP缓存策略和服务工作者,我们可以为用户提供更流畅的浏览体验,同时减轻服务器...

    显示所有缓存 清除所有缓存 Asp.net(C#)

    ### 显示所有缓存与清除所有缓存:ASP.NET (C#) 在Web开发中,缓存技术被广泛应用于提高应用程序的性能...通过上述方法,我们可以有效地管理ASP.NET应用程序中的缓存,提升应用性能的同时也能灵活控制缓存的生命周期。

    Loadrunner负载测试 浏览器缓存设置

    2. **启用缓存**:相反,如果要模拟有缓存的情况,可以使用`web_cache_enable()`函数开启缓存,并通过`web_cache_control()`来控制缓存策略。例如,可以设置`web_cache_control("cache", "on")`来开启缓存,并通过`...

    如何解决缓存问题及如何设置缓存

    1. 使用Cache-Control头:在HTTP响应头中添加Cache-Control头,可以控制浏览器的缓存行为。例如,可以设置max-age参数来指定缓存的有效期。 2. 使用ETag头:ETag头可以标识Web页面的版本号,当Web页面更新时,ETag头...

    Android代码-web资源的本地缓存方案

    CandyWebCache是移动端web资源的本地缓存解决方案,能够拦截webview的请求,并优先使用本地缓存静态资源进行响应,以此来对webview加载页面性能进行优化。 特点: 协议层拦截请求,透明替换响应 静态资源版本控制及...

    Android WebView 缓存详解

    Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、...数据缓存:分为AppCache和DOM Storage两种 我们开发者可以自行控制的就是这些缓存资源 AppCache:  我们能够有选择的缓冲web

Global site tag (gtag.js) - Google Analytics