`

控制 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 规范。
分享到:
评论

相关推荐

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

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

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

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

    面向网站管理员的Web缓存加速指南

    Web缓存在互联网上最容易被误解的技术之一:网站管理员经常怕对网站失去控制,由于代理缓存会“隐藏”他们的用户,让他们感觉难以监控谁在使用他们的网站。  是一篇知识性的文档,主要目的是为了让Web缓存相关概念...

    Android WebView 缓存详解

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

    winform调用webapi获取Token授权案例,webapi使用oauth2.0权限控制

    通过winform使用httpclient客户端调用webApi接口,api使用oauth2.0权限控制,调用接口需要进行token获取认证、

    分布式数据缓存系统的设计与实现

    布模式的分布式缓存,复制缓存和分布式缓存,采用JGroups 技术实现集群内节点间的通信及数据迁移,通过可靠性服务模块控制完成整个系统的数据冗余备份和失败恢复功能。经测 试,本文设计的分布式数据缓存系统提供了...

    ISA 服务器Microsoft® Internet Security and Acceleration (ISA) Server 2004 是可扩展的企业防火墙以及构建在 Microsoft Windows Server™ 2003 和 Windows® 2000 Server 操作系统安全、管理和目录上的 Web 缓存服务器,以实现基于策略的网际访问控制、加速和管理。

    Internet Security and Acceleration (ISA) Server 2004 是可扩展的企业防火墙以及构建在 Microsoft Windows Server™ 2003 和 Windows® 2000 Server 操作系统安全、管理和目录上的 Web 缓存服务器,以实现基于策略...

    Web应用与开发作业

    设计一个简单的IP地址过滤器,根据用户的IP地址进行网站的访问控制。例如:禁止IP地址处在192.168.2网段的用户对网站的访问。 3、Listener的理解和应用 通过监听器记录在线用户的姓名,在页面进行用户姓名的显示,...

    完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...

    Java图像处理的双缓存技术演示

    Web应用中的图像处理是非常重要的,Java使用Applet扩展了标签,让程序要可程序控制图像的显示,这给实际开B/S应用带来多一种图像技术,该例子演示了图像处理的双缓存技术处理图像抖动的问题。双缓存技术是Java完成...

    动态缓存加速软件aicache

    6. 灵活的文件刷新控制,包括cookie驱动控制、URL触发缓存更新控制、响应驱动 缓存终止(header驱动缓存终止)等功能,让aiCache同步更新一个整体页面或 一个网页元素。 7. 可作为HTTPS终点,把解密的流量发送给原始...

    漂亮的ComponentArtWebUI web界面

    Web.UI 2007.1 版本没有进行整体框架的改变,只是在Web.UI 2006.2的基础上进行了改进,所以通过最新的ComponentArt.Web.UI.dll可以很方便的对之前的应用程序进行编译。 ComponentArt Web.UI是全球知名的ASP.NET...

    ojsputil.jar 片段缓存 JAR包

    内容缓存是Web应用中最普通的优化技术之一,例如,可以使用一个自定义地jsp标签——我们将之命名为——由和将每一个需要被缓存的页面片段封装起来。任何自定义标签可以控制它所包含部分 (也即预先封装的页面片段)在...

    Web预取技术综述 PDF

    通过利用WWW访问的空间局部性,Web预取使缓存机制从时间局部性向空间局部性扩展.归纳了Web预取技术的分类,概括和比较了不同类别的优势和局限性,给出了预取模型的基本框架及每部分的主要功能,并对各种评价标准进行了...

    完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...

    ASP.NET Core中的Http缓存使用

    响应缓存还减少了web服务器生成响应所需的工作量。响应缓存由Http请求中的header控制。 而ASP.NET Core对其都有相应的实现,并不需要了解里面的工作细节,即可对其进行良好的控制。 了解Http缓存 Http协议中定义了...

    基于比例命中率的Web缓存区分服务 (2010年)

    基于反馈控制理论,通过系统辨识设计了缓存控制器。动态调整不同类别缓存对象的缓存空间,可保证高优先级Web对象的高命中率,而不同类别的Web对象命中率之比保持不变。在服务器端实现了基于比例命中率的缓存区分服务...

    详解Javascript获取缓存和清除缓存API

    JavaScript ServiceWorker API的好处就是让web开发人员轻松的控制缓存。虽然使用ETags等技术也是一种控制缓存的技术,按使用JavaScript让程序来控制缓存功能更强大,更自由。当然,强大有强大的好处,也有弊处——你...

    鱿鱼Web代理缓存-C/C++开发

    Squid是Web的缓存代理,支持HTTP,HTTPS,FTP等。 通过缓存和重用经常请求的网页,它减少了带宽并缩短了响应时间。 Squid具有广泛的访问控制,是一个出色的服务器加速器。 它可以在大多数可用的操作系统(包括...

    ASP缓存技术详解

     当你的web站点采用asp技术建立的初期,可能感觉到的是 asp动态网页技术带来的便利性,以及随意修改性、自如的http控制。但是,随着访问量的增加,你一定会发现自己的站点访问速度越来越慢,IIS重新启动得越来越...

Global site tag (gtag.js) - Google Analytics