當WML頁面下載到WAP設備后,它將保存在WAP設備內存中一段時間,直到這個時間過期。在這之后,頁面將從服務器下載,而不是從WAP設備的緩存讀取。這個過程被稱做Cache。
但是有些時候不想讓頁面從緩存中讀取,而是從服務器端讀取。一個典型的例子就是當服務器的內容不斷在更新的時候,通過在HTTP頭中加入一定的cache信息,來告訴WAP設備該頁面將不存儲在緩存中。
可以在服務器端生成HTTP頭,或者使用PHP、ASP、Perl或者其他服務端開發語言。這一行不能被包括在頁面里,既然是HTTP的信息頭,就不是WML元素。
對于靜態頁面,或許沒有使用服務器端腳本語言,許多瀏覽器支持META標簽來控制瀏覽器的Cache。看本部分的最后的例子。
將下面代碼加入到HTTP頭中,頁面將馬上過期:
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: DD. month YYYY HH:MM:SS GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
第一行告訴微型瀏覽器,頁面已經過期一段時間了。第二行告訴瀏覽器頁面最后一次修改的時間。DD應該換成當天的日期,month YY HH MM SS等等類推。第三行和第四行有同樣的效果。告訴瀏覽器頁面不被Cache(第三行適用于 HTTP 1.1,第四行適用于HTTP 1.0)。
下面的是PHP的一個例子:
<?
// set the correct MIME type
header("Content-type: text/vnd.wap.wml");
// expires in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// Last modified, right now
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// Prevent caching, HTTP/1.1
header("Cache-Control: no-cache, must-revalidate");
// Prevent caching, HTTP/1.0
header("Pragma: no-cache");
?>
下面是使用WebClasses(VB)的例子。使用"Response.Expires=-1",防止Cache。
Private Sub WebClass_Start()
'Set correct MIME type
Response.ContentType = "text/vnd.wap.wml"
'Make sure no caching
Response.Expires = -1
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
'Use basicwml(my own) as template
Set NextItem = basicwml
End Sub
這里有一個ASP的例子,同樣使用“Response.Expires=-1”防止Cache。
<%
Response.ContentType = "text/vnd.wap.wml"
Response.Expires = -1
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
%>
最后是使用META的例子:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
" <wml>
<head>
<meta forua="true" http-equiv="Cache-Control" content="max-age=0"/>
</head>
<card id="alwaysexpire">
<p>This deck will never be stored in the cache</p>
</card>
</wml>
下面的頁面是在經過86400秒(24 hours)后過期。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
" <wml>
<head>
<meta forua="true" http-equiv="Cache-Control" content="max-age=86400"/>
</head>
<card id="expire1day">
<p>This card will live in the cache for a day</p>
</card>
</wml>
有些瀏覽器例如:UP.Simulator如果可以通過“返回”達到另外一個卡片,那么它將不會重新裝載卡片。為了強制這個更新動作,用戶必須在META標簽中使用must-revalidate 參數。
<meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>
