以上的URL在WAP中无法工作的主要原因是用来分割每个变量和变量内容的 & (与号)没有转义。正确的格式应该是:
"/cgi-bin/somescript?username=john&telephone=123-123-1234&occupation=banana+bender"
在这里 & 被名字实体所替换。为了解释更清楚些,请看下面的代码:
<card id="input" title="Gimme some data">
<p><input type="text" name="username" format="M*m"/></p>
<p><input type="text" name="occupation" format="M*m"/></p>
<p>
<anchor>Send this
<go href="/cgi-bin/somescript?username=$(username)
&occupation=$(occupation)"/>
</anchor>
</p>
注意这不是真正的WAP协议,专门的字符应该转义,否则将得到不可预料的结果。
40. 为什么在HTTP中的Referer看不见?
当HTML浏览器从一个URL到另外一个URL的时候,它默认地会发送一个叫做 Referer的 HTTP头给服务器,告诉它在浏览这个页面之前的那个页面。这是一个非常有用的特点,在WAP环境中同样也有。
但是既然这个信息来自用户代理(浏览器)、WAP设备,通常为了节约带宽和时间,就被省略了。
为了使用 Referer ,应该使用新的URL标签例如: <a>,<go>等等,并且加入参数:sendreferer。
<go href="/somedir/somedeck.wml" sendreferer="true"/>
这样就会把参考的URL发送到服务器。
41. 如果没有找到URL,有可能重新将用户引导到另外一个WML卡片或者页面吗?
是的。但这是服务器端的特点,与客户端没有关系。
42. 为什么普通的HTTP 302重新导向不好使?
这的确是一个事实。核心的问题是在服务端的脚本语言,而不是在服务端语言和服务器之间。
所谓的302 Found HTTP反应是指服务器告诉用户代理,它所需要的资源在另外的地方可以找到。302反应可能包括一个人们可理解的信息,如果在这种情况下“ Content-type: 就被设置了
。笔者所测试过的服务器,即使没有内容也都加了“Content-type:。默认的 “Content-type: 是text/html。当然有些网关不喜欢这个类型。
以下的例子已经经过测试,在Apache和Microsoft Internet Information Server都可以工作。如果使用其他的Web Server,或者其他的脚本语言,需要能转换这些简
单的脚本。关键的工作是十分简单的,除非需要,不用告诉服务器整个HTTP头。大多数Web Server将自动完成这个HTTP头,使得用户代理可以理解。
所有的代码例子可以在线测试。如果它们能够工作,用户将被重新引导到http://wap.colorline.no/clientinfo.html ,在那儿将产生一个WML页面来显示所有的HTTP头。
PHP 代码测试可以在 http://wap.colorline.no/wap-faq/apps/302test.php3中找到。
<?
header("Location: http://wap.colorline.no/clientinfo.html");
header("Content-type: text/vnd.wap.wml";
?>
Perl测试代码可以在http://wap.colorline.no/cgi-bin/302test.pl中找到。
print "Location: http://wap.colorline.no/clientinfo.html/n";
print "Content-type: text/vnd.wap.wml/n";
ASP测试代码可以在 http://www.colorline.no/302test.asp中找到。 (注意不同的URL):
<%
Response.Redirect = "http://wap.colorline.no/clientinfo.html";
Response.ContentType = "text/vnd.wap.wml";
Response.Flush
Response.End
%>
43. 可能在WML中实现ASP Session吗?
不可能。可以把信息存储在临时变量中模拟Session。Session是保存在用户PC上的“cookies中。目前的WAP设备不支持“cookies。不过下一代的设备和WML可能支持“cookie
s。
44. WAP支持Session吗?
在HTML中,一个十分普遍的“处理用户的方法就是为每个用户分配一个“session。这个有时候是通过指定一个独一无二的cookies来实现的。然而WAP的资源非常有限,因此session的处理必