理解ASP.NET与客户端缓存之HTTP协议

asp.net|缓存|客户端

  前言

  这个系列的文章要讨论的是如何通过ASP.NET服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展。我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这些属性来实现我们的缓存策略。

  HTTP基础知识

  由于讨论涉及到客户端缓存,所以还是先要简单介绍一下HTTP协议是如何控制客户端缓存的,这里涉及到HTTP头的Last-Modified、ETag等属性。

  Last-Modified

  在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:

Last-Modified: Fri, 12 May 2006 18:53:33 GMT

  客户端第二次请求此URL时,会在头部加入一个属性,询问该时间之后文件是否有被修改过:

If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT

  如果服务器端的文件没有被修改过,则返回状态是304,内容为空,这样就节省了传输数据量。如果服务器端的文件被修改过,则返回和第一次请求时类似。

  ETag

  和Last-Modified类似,由于RFC2616(也就是HTTP/1.1)中没有说明ETag该是什么格式的,只要确保用双引号括起来就行了,所以你可以用文件的hash,甚至是直接用Last-Modified,以下是服务器端返回的格式:

ETag: "50b1c1d4f775c61:df3"

  客户端的查询更新格式是这样的:

If-None-Match: W/"50b1c1d4f775c61:df3"

  如果ETag没改变,则返回状态304然后不返回,这也和Last-Modified一样。

Expires

  这个属性就如我们在ASP中使用HttpResponse.ExpiresAbsolute一样直接,声明某某时刻过期之后浏览器就应该重新请求该URL,使用格式为:

Expires: Sun, 10 Feb 2002 16:00:00 GMT

  注意HttpResponse.ExpiresAbsolute在ASP.NET中是不建议使用的,现在我们应该使用的是HttpResponse.Cache.SetExpires。

  Pragma

  通常我们用到的值就是no-cache,这和在Cache-Control中使用no-cache值是一样的,Cache-Control在下面讲。Pragma的使用格式如下:

  Pragma: no-cache
  Cache-Control

  这是一个集合型属性,它里面能够包含很多子属性,并且允许用户扩展新的子属性。常见的子属性包括:

  max-age - 以秒为单位的超时,覆盖Expires属性。
  public - 允许保存在共享缓存中。
  private - 只允许保存在私有缓存中。
  no-cache - 不允许缓存。
  no-store - 不允许缓存在持久介质中。
  no-transform - 不允许转换存储系统。

时间: 2024-09-16 18:54:58

理解ASP.NET与客户端缓存之HTTP协议的相关文章

理解掌握ASP.NET与客户端缓存之HTTP协议

asp.net|缓存|客户端 前言 这个系列的文章要讨论的是如何通过ASP.net服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展.我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这些属性来实现我们的缓存策略. HTTP基础知识 由于讨论涉及到客户端缓存,所以还是先要简单介绍一下HTTP协议是如何控制客户端缓存的,这里涉及到HTTP头的Last-Modified.ETag等属性. Last-Modified 在浏览器第一次请求某一个URL时,

asp.net 各种页面缓存详解

asp教程.net 各种页面缓存详解 实现     要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可.     <%@ OutputCache Duration="60" VaryByParam="*" %>     如同其他页面指令一样,该指令应该出现在 ASPX 页面的顶部,即在任何输出之前.它支持五个属性(或参数),其中两个是必需的.     Duration     必需属性.页面应该被缓存的时间,以秒为单位.必须是正整

ASP.NET AJAX客户端生命周期分析(理论篇)

一.引言 微软的ASP.NET AJAX框架,作为一个相对比较完善的AJAX框架,有许多方面值得我们作深入研究.本文中,我们将结合一个具体的例子试图探究ASP.NET AJAX框架的客户端生命周期过程. [注]阅读本文最好要结合"ASP.NET应用程序生命周期概述"和"ASP.NET页面生命周期概述"两篇文章共同学习. 二.ASP.NET AJAX客户端生命周期原理 因为ASP.NET AJAX框架在开发思路上极大地借鉴了ASP.NET 2.0的开发技术,而且将会被

ASP.NET AJAX客户端编程之旅(六)——来做一个自己的客户端控件

通过前面的文章,我们了解了ASP.NET AJAX框架的很多知识.在这一篇文章中,我们来做一个自己的ASP.NET AJAX客户端控件:PasswordValidator.这个控件关联到的DOM元素是一个span或div,并且关联到一个password类型的input标签,当用户在input中输完密码并且这个input失去焦点时,检测用户输入的密码是否合理,如果合理,则给出这个密码的安全程度. 从这一篇开始,将使用VS2008作为IDE,请朋友们注意. 建立AJAX客户端控件控件的骨架 在以前的

《精通 ASP.NET MVC 5》----第1章 ASP.NET MVC背景 1.1 理解ASP.NET历史

第1章 ASP.NET MVC背景 精通 ASP.NET MVC 5 ASP.NET MVC是微软公司的一款Web开发框架,整合了"模型-视图-控制器"架构的高效与整洁.敏捷开发最现代的思想与技术,以及当前ASP.NET平台最好的部分.ASP.NET MVC是传统ASP.NET Web Form的一个完善的替代品.除了一些微不足道的Web开发项目之外,在各种Web开发项目中,它都具有明显的优势.在本章中,你将了解微软公司当初为什么创建ASP.NET MVC,与它的前版和替代品之间的比较

先贴一篇较简单的用ASP+RDS客户端参生报表

上回曾贴一篇较简单的用ASP+RDS客户端参生报表 此回贴一篇较复杂的用ASP+RDS+组件客户端参生报表 错误说明:(若提示ActiveX 元件无法参生 RDS.DataSpace)IE需设置安全选项操作:菜单工具->INTERNET选项->安全性->自定义 设置:起始但ActiveX不标示为安全->开启 原理说明:客户端直接用RDS产生RecordSet安全性不够,使用了middle-tier Automation components 后可大大增加安全性!请看下文:编写注册元

浅析ASP.NET FORUMS中缓存机制的应用

asp.net|缓存 浅析ASP.NET FORUMS中缓存机制的应用 在ASP.NET中有三种缓存机制,我在这里主要提到的是ASP.NET FORUMS中使用的缓存API Cache对象Cache对象可以说在ASP.NET FORUMS中无所不在,以SiteUrls()类为例在构造函数中有如下代码if (HttpRuntime.Cache[cacheKey] == null) { . .System.Web.Caching.CacheDependency dep = new System.We

ASP.NET AJAX客户端编程之旅(七)——剩下的问题(完结篇)

关于Loading... 相信做Ajax应用的朋友没有不使用loading的,不然网络延迟会让用户体验非常差,而且用户会不知道系统正在工作.那么当使用ASP.NET AJAX客户端编程时,怎么做loading呢? 我们先来分析一下loading应该什么时候显示,什么时候终止.一个典型的异步交互过程如下: 1.用户发出请求 2.网络延迟 3.服务器端处理 4.服务器返回数据 5.网络延迟 6.客户端呈现数据 在这个交互过程中,loading应该在第一步后出现,而在第六步结束后才消失.结合前面的知识

ASP.NET AJAX客户端编程之旅(五)

ASP.NET AJAX客户端编程之旅(五)--以组件的思想开发Ajax应用:行为.绑定及xml-script 初识行为组件 行为组件一词中的"行为"是从单词Behavior直译过来的.但是我个人认为,就其作用来说,应该叫"属性赋予组件"更合适一点.因为行为组件实际的作用是:为某一控件赋予某种属性.例如ClickBehavior是为某个控件添加"具有单击事件"这个属性,而OpacityBehavior则是为控件添加"透明显示"