立即注册
 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广州大学城网业务调整

缓存和“到期”ASP网页的处理办法 [复制链接] qrcode

查看: 4893 | 回复: 0

gzuc
发表于: 2008-5-10 16:49:11 | 显示全部楼层

  用户的浏览器以及他们和服务器这间的任一代理服务器,都可以缓存HTML和用ASP创建的网页。当用户随后请求页面时,浏览器就发送一个“最新修改”的请求到服务器(使用一个包含缓存版本的日期的HTTP_IF_MODIFIED_SINCE报头),询问网页是否已被修改。   
  若没有被修改,服务器应用状态码和消息“304   Not   Modified”来响应,浏览器将使用缓存的内容而不会通过网络下载一个副本。若已经存在已修改的版本,它就会与“200   OK”状态码和消息一道被发送出去。   
  1)   Response.CacheContol属性   
  其他的一些因素也会影响这一处理过程。然而,任一被网页使用的网络路由内的代理服务器(一般位于客户机端),能被通过设置Response.CacheControl属性为Private来放弃缓存网页。在ASP   3.0中对ASP网页这是缺省的,不用设置。但在网页为个别访问者特别定制时尤其有用。这可以阻止别的在同一网络上的用户进入同一网页。当CacheControl的属性值被设定为Public时,允许服务器缓存网页。注意,一些代理服务器可能表现得不尽相同,或忽视或越过这个报头。   
  在IE4中,在代理服务器缓存可用时,有可能得到一个虚假的“This   page   has   expired”消息。我们已提供了一个网页(expiretest_form.asp),可以通过自己的代理服务器在网络上做试验,来检查这一属性的影响。可以通过在“Response   Object”主页中单击“Response.   CacheControl”链接来显示这个网页。如下图所示:   
   
  这一页面提交到expiretest_result.asp网页时,能够设置Response.CacheControl属性,然后在网页中插入值和脚本被执行的时间:   
  <%   
  If   Request.Form(“public”)   =   “on”   Then   ‘Cache-Control   check   box   was   ticked   
  Response.CacheControl   =   “Public”   
  Else   
  Response.CacheControl   =   “Private”   
  End   If   
  %>   
  <HTML>   
  ...   
  Cache-Control   is:   <B><%   =   Response.CacheControl   %></B><P>   
  Value   in   text   box   is:   <B><%   Response.Write   Request.Form(“textbox”)   %>   
  <%   
  Response.Write   Right(“0”   &   Hour(Now),2)   &   “:”   &   Right(“0”   &   Minute(Now),_   
  &   2)   &   “:”   &   Right(“0”   &   Second(Now),2)   
  %></B>   
  通过单击浏览器上的“Back”和“Forward”,能看到代码是自动执行还是使用缓存的副本,如下图所示。结果随浏览器的不同而变化。   
   
  2)   Response.Expires和Response.ExpiresAbsolute属性   
  控制缓存的网页存放时间的两个属性为Response对象的Expires和ExpriesAbsolute属性。Response.Expires定义了风页在从缓存区被丢弃前应保持有效的时间长度,以创建以来的分钟数形式表示。ExpiresAbsolute属性为到期时间设置了一个绝对的日期和时间。   
  我们提供一个命名为addheaders_form.asp的例子网页,用于演示如何使用这些属性。在“Response   Object”主页中单击对这两种属性的链接,如下图所示:   
   
  在这一页面中,可加入自己定制的HTTP报头,并可设置一些影响响应的HTTP报头的多种属性。在“提交查询内容”按钮上单击时,页面show_headers.asp在返回的数据流中添加所选的报头,然后显示用来完成此操作的代码,显示相应的执行时间,可用来检查页面是被缓存还是被再次执行,如下图所示:   
   
  show_headers.asp网页中的代码创建和添加HTTP报头,程序如下:   
  <%   
  ‘Write   HTTP   headers   before   any   other   output   
  If   Request.Form(“expires”)   =   “on”   Then   _   
  Response.Expires   =   Request.Form(“expires_value”)   
  If   Request.Form(“expiresabs”)   =   “on”   Then   _   
  Response.ExpiresAbsolute   =   Request.Form(“expiresabs_value”)   
  If   Request.Form(“lastmod”)   =   “on”   Then   _   
  Response.AddHeader   “LAST-MODIFIED”,   Cstr(Request.Form(“lastmod_value”))   
  If   Request.Form(“pragma”)   =   “on”   Then   _   
  Response.AddHeader   “PRAGMA”,   CStr(Request.Form(“pragma_value”))   
  If   Request.Form(“refresh”)   =   “on”   Then   _   
  Response.AddHeader   “REFRESH”,   CStr(Request.Form(“refresh_value”))   
  If   Request.Form(“addheader”)   =   “on”   And   Len(Request.Form(“addheader_name”))   Then   _   
  Response.AddHeader   CStr(Request.Form(“addheader_name”)),   _   
  CStr(Request.Form(“addheader_value”))   
  If   Request.Form(“status”)   =   “on”   Then   _   
  Response.Status   =   Request.Form(“status_value”)   
  %>   
  <HTML>   
  ...   
  ...   Show   code   and   execution   time   
  ...   
  其余部分仅仅是显示已被执行的代码和执行时间。读者会注意到包含在网页中的定制的报头“PRAGMA”(至今我们还没讨论过)。一些(先前的)代理服务器使用它作为网磁是否应被缓存的指示。缺省是网页被缓冲,除非接受到HTTP报头“PRAGMA=NO-CACHE“。   
   
跳转到指定楼层
快速回复 返回顶部 返回列表