处理主页的Headers
浏览器的请求和服务端的响应都包含headers,Headers提供了有关请求和响应的附加信息,也包括了浏览器生成请求和服务端提供响应的过程信息。
Active Server Pages包含了相当多的集合和方法来帮助你维护headers。这些方法一部分对应于特定的任务,例如提供了站点内容分级以及站点限期时间等功能,其他的方法和集合允许你进行一般的headers的维护。以下部分详细介绍如何使用这些集合方法来影响headers。
接受headers
当浏览器在服务端接受到一个主页时,这个请求就包括了相当数量的headers,你可以利用request对象的ServerVariable集合来接受这些headers,ServerVariable集合既包括了headers也包括了服务端的一些其他信息。下面的例子将ServerVariable集合的所有内容名称显示出来了。
<HTML>
<HEAD><Title>服务端变量</Title></HEAD>
<BODY>
<%
For Each name IN Request.ServerVariables
Response.write(“<p><b>”&name&”</b>:”)
Response.write(Request.ServerVariables(name))
NEXT
%>
</BODY>
</HTML>
显示结果如图14.3所示。
可以看出,ServerVariables集合包含了很多各种类型信息,在附录A“快速ASP对象和组件参考”中包含了标准的headers以及Server变量的列表。下列解释几个最为常用的:
■HTTP_REFERER.当某人通过链接到达当前页时,HTTP_REFERER header就保存了这个用户的来源,例如,如果你想知道用户有多少是从yahoo中访问这个站点,就可以利用HTTP_REFERER来获取这样的信息。
■HTTP_USER_AGENT. 这个Header指示了用户访问你的站点所用的网络浏览器的类型,当你需要了解你的网站主要客户群使用何种浏览器,你就可以利用这个Header中进行了解。
■Remote_Addr.这个header包括了访问者的IP地址,这个地址可以使我们知道访问者的初始来源,例如是MIT的学生或者是美国在线的用户。
■QUERY_STRING. QUERY_STRING变量包含的是输入网络地址后问号后面所带的参数。这个变量的详细使用方法请见15章 “处理多个Active Server Page”
■SCRIPT_NAME. 这个变量包含的是当前Active Server Page的虚拟路径,进行自己的引用连接时可能会用到。
■SERVER_NAME. 这个变量包含的是Server的网址。
■PATH_TRANSLATED. 这个变量包含的是当前Active Server Page的真实地址。
现在版本的Internet Explorer(3.0版和4.0版)在请求中包含下面的Headers.
■HTTP_UA_COLOR. 这个Header包含的是浏览器可以显示多少种颜色。
■HTTP_UA_CPU. 这个Header包含的是执行浏览器的电脑的CPU型号。
■HTTP_UA_OS. 指的是浏览器所在的操作系统。
■HTTP_UA_PIXELS. 指的是浏览器所用的电脑的分辨率。
图14.3 ServerVariables集合
注意
请不要依赖以上的几个Headers,因为那只适用于windows95下的IE3.0和IE4.0。
你当然可以根据需要利用ServerVariables集合只是去接受特定的header变量,例如下面这个例子,只有从origin.asp进入这个例子程序才被允许:
<HTML>
<HEAD><TITLE>服务端变量</TITLE></HEAD>
<BODY>
<%
WhereForm=request.ServerVariables(“HTTP_REFERER”)
IF WhereForm=“http://www.mysitename.com/example/origin.asp” THEN
%>
欢迎进入迈至科ASP教程示例
<%
ELSE
%>
您未被授权访问该页!
<%
END IF
%>
</BODY>
</HTML>
在这个例子中,HTTP_REFERER header检查用户连接的来源,只有是从http://www.mysitename.com/example/origin.asp连接过来的才被允许访问,这样进行授权控制就非常容易。
警告
使用这些header有时也会有麻烦,因为并不是所有的浏览器都有这些header,例如,早期版本的一些浏览器不支持HTTP_REFERER header。
利用Headers来控制一个主页是否进入缓存区
代理服务器被用来减少在互联网中接受主页的时间。代理服务器将主页复制在自己缓存中,这样别人就只需要从它的缓存中取出来而不用到原始的服务器上,但是对于Active Server Pages来说(同样适用于Cold Fusion),代理服务器是个很讨厌的东西,因为它的内容是动态更新的,每次访问都可能由于你所限定的条件而显示不同内容,而保存在cache中的显然无法做到这点,因此,你肯定不希望别人从代理服务器的Cache中调用。
默认情况下,代理服务器不会将Active Server Page放入缓存,不过你可以用ASP的CACHE_CONTROL Header来控制其是否被代理服务器存入缓存。在你的Active Server Page的首行添加下面这句将允许代理服务器将该ASP存入缓存。
<% Response.CacheControl=“Public” %>
你一样可以限定你的浏览器的缓存怎样进行缓存操作,浏览器通常有内存cache和硬盘cache,使用Response对象的Expires属性,你可以限定浏览器对其缓存的时间范围,如果设置为0,那么浏览器就不会将Active Server Pages存入Cache,如下:
<% Response.Expires=0 %>
你还可以限定Cache存在截止的具体的日期时间。如果这样,浏览器将持续使用这个Cache副本直到截止时间,下例截止时间为1998年8月1日:
<% Response.ExpiresAbsolute=#Oct 1, 1998 00:00:00#>
注意
根据HTTP1.1协议,你不能将截止时间设定的超过一年,相信内容见http://w3.org
你也可以利用Internet Service Manager来限定主页的过期时间,选择HTTP Headers页然后找相关项进行填写修改。
利用Headers来限定内容等级
Platform for Internet Content Selection(PICS)提供了为一个主页或者整个站点做标记的方式。例如,你可以用PICS标记来指示出站点内容的暴力或者色情等级。
PICS自己不是一个等级服务,PICS标准可以适应于网络上任何不同的文化,这意味着你可以根据自己的标准指定等级而使得互联网上PCIS的标准千奇百怪。例如一个文静的教师自己制定的标准和一些近似疯狂组织的成员制定的标准肯定有很大区别。
决定使用哪种等级服务是用户个人自己的事情。理论上,个人可以根据自己的爱好选择等级服务。通常,这种等级服务支持面很广,IE3.0以及以上版本都可以支持PCIS标准。不过,默认的唯一的等级服务是Recreational Software Advisory Council(RSAC)。同样的组织为电脑游戏进行了等级划分。RSAC等级系统有四个种类,分别是暴力、裸体、性、以及语言,对于每一个种类,你可以在等级1到5之间选择。
用户可以设置IE来阻住不符合用户爱好的站点。例如,用户可以阻住充满暴力和色情的站点而去看其他健康的站点。浏览器还可以阻住那些没有设定等级的站点,(不过,这样的话,网络上的绝大部分站点就都被阻住了)
接受一个RSAC等级评定,在RSAC站点注册就可以了,(目前是免费的)。网址是:http://www.rasc.org。填写一些表格,就可以了,如图14.4。
图14.4 RSAC站点的提问信息
例如,你的站点没有暴力(v)、裸体(n)、性(s)和不健康语言(l)的话,那么,你的站点就会受到这样的PICS 标志:
(PICS-1.1 “Http://www.rsac.org/rathingsv01.cfml” l gen true
comment “RSACi North America Server”
by “walther@aspsite.com”
for “http://www.aspsite.com”
on “1998.06.10T02.04-0800” r (n 0 s 0 v 0 l 0))
在你获得了这样的标志后,你就可以在主页首利用这种标志,这时可以使用PICS属性来在当前的Header中添加这样的标志,见下面的例子:
<% Response.PICS(“(PICS-1.1”&chr(34)
&“Http://www.rsac.org/rathingsv01.cfml” &chr(34)
&“l gen true comment”&chr(34)
&“RSACi North America Server”&chr(34)
&”by”&chr(34)& “walther@aspsite.com”
&chr(34)&”for”& “http://www.aspsite.com”
&chr(34)&”on”&chr(34)
& “1998.06.10T02.04-0800”
&chr(34)&r (n 0 s 0 v 0 l 0))”)
%>
这样就将标志加在了主页的Header,但是这种方法太麻烦了,因为每一个双引号都要用&chr(34)&来处理,实在麻烦,下面是作为主页操作的更为简单的方法:
<META http-equiv=“PICS-Lable”
content=‘(PICS-1.1 “Http://www.rsac.org/rathingsv01.cfml” l gen true
comment “RSACi North America Server”
by “walther@aspsite.com”
for “http://www.aspsite.com”
on “1998.06.10T02.04-0800” r (n 0 s 0 v 0 l 0))’>
注意
你当然也可以利用Internet Service Manager来限定内容等级,在HTTP Headers页,选择Edit Ratings。