asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

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


发布日期:2024年01月06日
 
理解ASP.NET与客户端缓存之HTTP协议
前言

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

HTTP基础知识

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

LastModified

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

LastModified: Fri May :: GMT

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

IfModifiedSince: Fri May :: GMT

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

ETag

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

ETag: bcdfc:df

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

IfNoneMatch: W/bcdfc:df

如果ETag没改变则返回状态然后不返回这也和LastModified一样

Expires

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

Expires: Sun Feb :: GMT

注意HttpResponseExpiresAbsolute在ASPNET中是不建议使用的现在我们应该使用的是HttpResponseCacheSetExpires

Pragma

通常我们用到的值就是nocache这和在CacheControl中使用nocache值是一样的CacheControl在下面讲Pragma的使用格式如下

Pragma: nocache

CacheControl

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

maxage 以秒为单位的超时覆盖Expires属性

public 允许保存在共享缓存中

private 只允许保存在私有缓存中

nocache 不允许缓存

nostore 不允许缓存在持久介质中

notransform 不允许转换存储系统

上一篇:ASP.NET强大的性能

下一篇:ASP.NET2.0:AdventureWorks贸易分析(2)