首页 > 编程 > .NET > 正文

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

2024-07-10 13:09:05
字体:
来源:转载
供稿:网友
  前言

  这个系列的文章要讨论的是如何通过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 - 不允许转换存储系统。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表