、HTTP 11的简要介绍 [TOP]
HTTP 11是一个基于文本的互联网实体信息交互主流协议,这里的实体可以是WAP兼容浏览器之类的用户终端,可以是WAP网关之类的代理服务器,也可以是Java srvlt之类的源服务器程序。它们之间的交互信息就是两大类:客户端对服务器端的请求(rqst)和服务器端对客户端的响应(rspns)。一次完整的交互包括一个请求和对它的响应。
所有的请求和响应都采用[RFC822]中定义的标准互联网消息格式,框架如下:
消息定义
没有或多个消息头
CRLF(空行回车)
可选的消息本体
其中消息定义不分指定了发送消息的类型。请求和响应都可以包含多个消息头,用来进一步或者重新定义用户终端和服务器之间的交互。CRLF仅仅用来将信息定义和消息本体分开。
1、 请求 [TOP]
在消息定义部分可以这样定义请求: 请求类型 URL HTTP/11
其中请求类型可以是下面的一种:
① OPTION:返回请求者和相应者之间可以使用的通信选项,主要用来检测服务器处理能力;
② GET:获得以URL标示的文件内容或者程序执行结果。服务器根据文件名后缀判断服务内容,比如该URL是静态文本还是一个程序;
③ HEAD:除了不返回响应的信息本体以外,得到的是跟GET一样的信息。一般用来测试链接的有效性、可达性和近期修改;
④ POST:把消息本体中的消息发送到一个URL或者其他类似的服务器端定义行为。通常用来提交一个HTML表单或者一些数据操作活动;
⑤ PUT:把消息本体中的消息发送到一个URL,跟POST类似,但不常用;
⑥ DELETE:删除URL指定的资源;
⑦ TRACE:调用一个远程应用层请求消息回路。发出这个消息的用户终端除了收到原来的消息内容以外,还得到消息在Intrnt上的传送路径。
最常用的请求类型--也是我们在处理WAP应用时最关心的--是GET和POST。假设有一个WML文档,我们用UP的浏览器去浏览的话,就会向服务器发出如下GET请求:
GET /ndxwl HTTP/11
apt-harst: UTF-8
apt-langag: h
apt: txt/vnd浏览器中的定义是大约30天。不过,也许你会想把一个URL的缓存时间尽量延长,比如你公司的LOGO,这样每次开页面的时间就会减少。用下面两种方法能够很简单地实现:
指定一个离现在很远的过期日,比如:Exprs: T, 01 Jan 2002 00:00:00 GMT;
指定一个很大的缓存时间,如:Cah-Cntrl: ax-ag=3153600。这个例子可以让URL缓存一年。用户终端允许的最大整数是2,147,483,647,所以你可以让一个URL保存超过68年之久。当然,到那个时候,你的机早就那报废了。
2、 指定对URL的缓存时间 [TOP]
通常的情况是对一个URL你只需要缓存一段时间。比如股票报价系统,网页可能需要5分钟更新一次,那么你只要在DECK的HEAD部分指定Cah-Cntrl: ax-ag=300就行了。 如果用户在5分钟以内再次检索该页面,看到的还是缓存里的网页。如果在5分钟以后,就会到服务器上获取最新的数据。
另外一种控制缓存时间的方法是使用前面提到过的Exprs,不过这种方法只能告诉用户终端:只要过了指定时间,无论什么时候访问页面都要刷新。如果你下次要控制时间,只能改变Exprs里的时间值。
3、 禁止对URL的缓存 [TOP]
对于快速变化的内容,一般都会希望每次都得到最新的数据。所以这个时候要完全禁止对相关网页的缓存。方法有三种:
设定Cah-Cntrl: n-ah;
设定最大缓存时间为0,Cah-Cntrl: ax-ag=0;
设定缓存到期日为一个早就过去的日期,Exprs: Mn, 1 Jan 1990 00:00:00 GMT。
实际上,后两种不是最好的选择。首先这样会多占用终端的处理时间,因为当碰到这个DECK时,终端需要计算一下过期时间。其次,这样会多占用一些字节,而且在表达上也不够清楚。
三、验证(valdatn)和历史堆栈(Hstry Sta) [TOP]
在HTTP11中对缓存进一步提出了验证的概念。验证的目的就是检验缓存项目是否在有效期内。由于历史堆栈的存在,WAP终端上的验证过程变得有点复杂。
WAP标准规定所有的WAP设备都至少要有可以容纳10-个项目的历史堆栈。当用户按下由定义的后退(baward)链接,URL被弹(pp)出。
一般情况下,所有的前行链接都会被验证,而后退链接则不会,因为它已经在ah里了。可是我们有时候还是希望当用户按下后退键时依然能够得到最新的数据。如果终端总是不予验证的话,那用户只好找到主菜单再重新进入那个页面。
幸运的是,我们用Cah-Cntrl:st-rvaldat就可以强迫用户终端在用户按ba时对URL进行验证。当然,进行验证并不是说该页面会立刻重新读取,而是根据他是否过期来决定。如果没有过期,验证的结果仍然是显示缓存中的页面。
如果你需要每次ba都重新读取页面,用Cah-Cntrl:st-rvaldat, n-ah可以实现。另外,把 n-ah换成ax-ag=300就可以在ba时对已缓存了300秒的页面进行刷新。
四、HTTP头与ta元素 [TOP]
到这里,大家已经知道HTTP消息头的在WAP页面的作用了。不过要在WML文档里设置这些消息头,就要用到ta元素,它只能出现在WML文档段里。下面是几个消息头和它们的表示形式:
Exprs: Mn, 10 Jan 2000 00:00:00 GMT
Cah-Cntrl: ax-ag=300
Cah-Cntrl: n-ah
当网关在WML文档中扫描到元素时,就会把它们转换成WSP等效的HTTP消息头,然后用户终端就可以据此对缓存进行控制了。
如果你在阅读得很入味的时候,又正好有事离开,那请进行以下操作.