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

理解ASP.NET与客户端缓存之HTTP协议,第1张

理解ASP.NET与客户端缓存之HTTP协议,第2张

本系列文章将讨论如何通过ASP.net服务器端技术优化客户端缓存策略,并使该策略可配置和可扩展。我们需要了解的是从HTTP协议中的相关属性对客户端缓存的影响,到ASP.NET如何控制这些属性来实现我们的缓存策略。

HTTP的基础知识

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

最后修改的

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

最后修改时间:Fri,2006年5月12日18:53:33 GMT

当客户端第二次请求该URL时,它会在标题中添加一个属性,询问文件在这次之后是否被修改过:

修改时间:Fri,2006年5月12日18时53分33秒GMT

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

电子标签

类似于Last-Modified,由于RFC2616(也就是HTTP/1.1)并没有规定ETag应该是什么格式,只要确保用双引号括起来就可以了,这样就可以使用文件的hash,甚至可以直接使用Last-Modified。下面是服务器返回的格式:

ETag: "50b1c1d4f775c61:df3 "

客户端的查询更新格式如下:

if-None-Match:W/" 50 B1 C1 D4 f 775 c 61:df3 "

如果ETag没有改变,它将返回到状态304,然后不返回,这与Last-Modified相同。

期满

这个属性和使用HttpResponse一样直接。ASP中的ExpiresAbsolute,声明浏览器应该在特定时间到期后重新请求URL。格式是:

到期日:2002年2月10日星期日16:00:00 GMT

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

杂注

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

Pragma:无缓存

缓存控制

这是一个聚合属性,可以包含许多子属性,并允许用户扩展新的子属性。的常见子属性包括:

Max-age-timeout以秒为单位,覆盖Expires属性。

public-允许保存在共享缓存中。

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

no-cache-不允许缓存。

不允许在持久媒体中进行无存储缓存。

no-transform-不允许更改存储系统。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 理解ASP.NET与客户端缓存之HTTP协议

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情