这两个对象是ASP所提供的内置对象中最常用的两个。在浏览器(或其他用户代理)和Web服务器之间,请求与响应中发生的信息交流可以通过ASP中的两个内置对象来进行访问和管理,这两个对象称为Request和Response对象。
在ASP页中所要进行的工作几乎都要访问这两个对象,使用这两个对象的方式将影响页面的效率及可靠性。当然,它们的主要用途是访问用户发回到服务器的值,即从HTML页的<FORM>段获得或附在URL后面作为查询字符串,并创建合适的输出返回给用户,且它们可以共享很多相同的因素。例如两个对象都可以使用存储在客户端计算机上的cookie。
客户端和服务器的交流
为节省篇幅,后面的内容中使用“浏览器”(browser)一词。但需要记住的是,能够访问Web页面的应用程序绝不仅只有浏览器,有许多特殊的应用程序从站点上下载网页,如为那些视力有缺陷用户设计的特殊的客户端程序或者是用通常的浏览器有其他困难的人。最显而易见的例子是搜索引擎用来访问Web上的站点的 robot。全面考虑这些因素,包括普通的Web浏览器,准确的词汇应该是用户代理(user agent)。
页面请求的对话
当一个浏览器向Web站点提出页面请求时,显然必须告诉服务器,其请求的是哪一个页面。首先要做的是通过域名与服务器建立连接,然后提供所请求的页面的全路径和名称。为什么要全路径和名称?Web是一个无国界的环境,所以必须创造一个会话标识每个客户。
这就意味着每当服务器完成向客户发送页面后,服务器就彻底忘记了这个客户。因此,当客户请求下一个页面时,与一个新的访问者是完全相同的。服务器无法记住这个客户,相应的,也就无法判断它们上次请求的页面是哪一个。因为,不能使用相对路径来提供一个页面,即使页面包含一个相对的链接也不行,例如:
<A HREF=”Download.asp”>Next Page</A>
浏览器将自动建立完整的新页面的URL,方法是使用当前页的域和路径;或使用页面<HEAD>段中的<BASE>元素,告诉浏览器一个页面中所有链接的其URL是什么。例如:
<BASE HERF=http://www.wrox.com/Store>
当把鼠标指向一个页面的链接时,可在浏览器的状态栏中看到。当前页面的路径和当前域名或基域名或基路径已经与请求的页面名结合在一起了。
1、 客户请求的细节
所请求页面的全路径和名称的组合是浏览器请求页面时发住服务器的唯一住处浏览器的请求也能包含浏览器宿主的住处和客户端运行的操作系统。实际的信息内容将随着浏览器的不同而有相应的变化,只有很少一部分能够由其他的应用程序如搜索引擎robot提供。为了更清楚地了解该信息,下面是从IE 5.0发出的一个对页面http://www.wrox.com/Store/
Download.asp的请求信息:
7/8/99 10:27:16 Sent GET /Store/Download.asp HTTP/1.1
Accept: application/msword, application/vnd.ms-execl, application/vnd.ms-
powerpoint, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-
comet, */*
Accept-Language: en-us
Encoding: gzip, deflate
Referer: http://ww.wrox.com/main_menu.asp
Cookie: VisitCount=2&LASTDATE=6%2F4%2F99+10%3A10%3A13+AM
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)
Host: 212.250.238.67
Connection: Keep-Alive
从中可以看出,这些信息中有关于用户代理和用户连接的细节(如缺省的语言),也有能够接受的文件或应用程序的类型列表,这些都是MIME类型的,在后面将会见到更多。浏览器能够接受几种图像文件及多种Microsoft Office文件类型。“标准”的文件类型,如tesx/html和text/text没有列在其中。文件列表中 */*表示可向浏览器发回任何类型的文件,由浏览器解释或通过一个插件(plug-in)应用程序来进行解释。
cookie: 条目包含的cookie存放在客户端的计算机上,并仅对该域有效。假如请求是点击链接的结果,而不是在浏览器的地址栏直接输入URL,则Referer:条目被显示出来,它包含了链接页面的完整的URL。
Host:条目包含客户计算机的IP地址或名称。然而,这还不足以准确辨别客户机。因为它们通过ISP连接时,IP地址是动态分配的,或者通过一个代理服务器连接时,IP地址是代理机的而不是实际的客户机的。
2、 服务器响应的细节信息
为响应上述的请求,并对匿名的浏览器(即用户不必提供用户名和访问口令)提供请求的页面,下面的内容是从服务器发往客户机的:
7/8/99 10:27:16 Received HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Connection: Keep-Alive
Date: Thu, 8 Jul 1999 10:27:16 GMT
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 2946
Last-Modified: Thu, 8 Jul 1999 10:27:16 GMT
Cookie: VisitCount=3&LASTDATE=7%2F8%2F99+10%3A27%3A16+AM
<HTML>
… rest of page …
</HTML>
可以看出服务器向客户端说明自己所用的软件及版本,第一行表明所使用的是HTTP协议,及返回码的状态。信息“200 OK”表示请求被接受并得到了满足。后面的信息是被返回的页面的细节,包括MIME类型(Content-Length:)、大小(字节)、最近更改时间,和返回客户端存储的cookie。响应中的其他信息是页面内容的信息流。
在某些情况下,服务器响应一个请求后,不能返回一个页面,也许因为页面不存在,或都客户没有相应的权限来访问它。我们将在后面讨论安全问题。现在,对于请求页面不存在的情况(例如用户在浏览器的地址栏输入了错误的URL),返回的信息开头为:
7/8/99 14:27:16 Received HTTP/1.1 404 Not Found
Server: Microsoft-IIS/5.0
…
这里,状态码和信息表明客户请求的页面无法找到。浏览器可使用这个信息向用户显示相应的信息(这种情况在IE 5.0中不显示服务器的响应信息,而显示相应“帮助性”的错误提示页面),也可显示服务器创建的缺省页面(依赖服务器的设置)。
Request和Response对象
从ASP中能够应用客户请求和服务器响应的细节是通过ASP内置的Request和 Response对象来实现的。
· Request对象:为脚本提供了当客户端请求一个页面或者传递一个窗体时,客户端提供的全部信息。这包括能指明浏览器和用户的HTTP变量,在这个域名下存放在浏览器中的cookie,任何作为查询字符串而附于URL后面的字符串或页面的<FORM>段中的HTML控件的值。也提供使用Secure Socket Layer(SSL)或其他加密通信协议的授权访问,及有助于对连接进行管理的属性。
· Response对象:用来访问服务器端所创建的并发回到客户端的响应信息。为脚本提供HTTP变量,指明服务器和服务器的功能和关于发回浏览器的内容的信息,以及任何将为这个域而存放在浏览器里新的cookie。它也提供了一系列的方法用来创建输出,例如无处不在的Response.Write方法。
<h3> Request对象成员的概述 </h3>
一 Request对象的集合
语法:
Response.collection|property|method
Request对象提供了5个集合,可以用来访问客户端对Web服务器请求的各类信息。
ClientCertificate
当客户端访问一个页面或其他资源时,用来向服务器表明身份的客户证书的所有字段或条目的数值集合,每个成员均是只读
Cookies
根据用户的请求,用户系统发出的所有cookie的值的集合,这些cookie仅对相应的域有效,每个成员均为只读
Form
METHOD的属性值为POST时,所有作为请求提交的<FORM>段中的HTML控件单元的值的集合,每个成员均为只读
QueryString
依附于用户请求的URL后面的名称/数值对或者作为请求提交的且METHOD属性为GET(或者省略其属性)的,或<FORM> 中所有HTML控件单元的值,每个成员均为只读
ServerVariables
随同客户端请求发出的HTTP报头值,以及Web服务器的几种环境变量的值的集合,每个成员均为只读
二 Request对象的属性
Request对象唯一的属性及说明如下表所示,它提供用户请求的字节数量的信息,它很少用于ASP页,我们通常关注指定值而不是整个请求字符串。
TotlBytes
只读,返回由客户端发出的请求的整个字节数量
三 Request对象的方法
Request对象唯一的方法及说明如下表所示,它允许访问从一个<FORM>段中传递给服务器的用户请求部分的完整内容。
BinaryRead(count)
当数据作为POST请求的一部分发往服务器时,从客户请求中获得count字节的数据,返回一个Variant数组(或者 SafeArray)。如果ASP代码已经引用了Request.Form集合,这个方法就不能用。同时,如果用了BinaryRead方法,就不能访问Request.Form集合
<h3> Response对象成员概述</h3>
语法:
Response.collection|property|method
一、集合
Response对象只有一个集合--Cookies,Cookies数据集合允许将数据设置在客户端的浏览器中。若指定的cookie不存在,则创建它。若存在,则自动更新数据。
语法:Response.Cookies(Cookie)[Key.Attribute]
这里的cookie是指定cookie的名称。而如果指定了key,则该cookie就是一个字典。attribute指定cookie自身的有关信息。attribute参数可以是下列之一:
Domain只写。若被指定,则cookie将被发送到对该域的请求中去。
Expires只写。指定cookie的过期日期。为了在会话结束后将cookie存储在客户端磁盘上,必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后cookie将到期。
HasKeys只读。指定cookie是否包含关键字。
Path只写。若被指定,则cookie将只发送到对该路径的请求中。如果未设置该属性,则使用应用程序的路径。
Secure只写。指定Cookie是否安全。
二、方法
Response.AddHeaderName,Value
向应答中添加一个新的HTML标题。Name为新HTML标题的名称。Value为该头变量的值。你可以添加任何名称和任何值的HTML标题。它并不替代现有的同名标题。一旦标题被添加,将不能删除。
Response.AppendToLogString
向Web服务器的日志条目的末尾添加一字符串。String为要添加到日志文件中的字符串。
Response.BinaryWriteData
该方法可以不经任何字符转换就将制定的信息写到HTTP输出,主要用于写非字符串信息(如客户端应用程序所需的二进制数据等)。Data是要发送的数据。
Response.Clear
删除缓冲区的所有HTML输出,但只删除响应正文而不删除响应标题。可以用该方法处理错误情况。需要注意的是,如果Response.Buffer设置为True,则该方法将导致运行是错误。
Response.End
强迫Web服务器停止执行更多的脚本,并发送当前结果,文件中剩余的内容将不被处理。如果Response.Buffer设置为True,则调用Response.end将缓冲输出。
Response.Flush
对于一个缓冲的回应,发送所有的缓冲信息。如果Response.Buffer设置为True,则该方法将导致运行是错误。
Response.RedirectURL
将客户端的浏览器重定向到一个新的Internet地址。Url为新网页的Internet地址。
Response.WriteVariant
Response.Write是Response对象最常用的方法,该方法可以向浏览器发送字符串。Variant是一字符串或一个具有字符串值的变量。
三、属性
Response.Buffer
缓冲一ActiveServerPage。回应只到某一页结束或Response.Flush或Response.End方法调用时才发送出去。服务器将输出送给客户端后就不能再设置Buffer属性。
Response.CacheControl
指明是否Proxy服务器能缓存ActiveServerPage。缺省时,其值为FALSE。当设置其属性为Public时,Proxy服务器可以缓冲由Asp产生的输出。
Response.CharSet(Charsetname)
将字符集名称(如GB)附加到Response对象中content-type标题的后面,用来设置web服务器响应给客户端的文件字符编码。一个可能的值为“ISO_LATIN_1”。
Response.ContentType
指明回应内容的类型。可能的值为text/plain和image/GIF,默认值text/HTML。
Response.Expires
浏览器可以缓存当前页的时间长度,以分钟为单位。
Response.ExpiresAbsolute
浏览器不能再缓存当前页的日期和时间。在未到期之前,可以返回。如果未指定时间,该主页在当天午夜到期;如果未指定日期,则到当天指定时间到期。
True/False=Response.IsClientConnected
属性为只读,指明自上次调用Response.Write之后,客户端是否仍然和服务器连接。该属性允许用户在客户端和服务器没有联接的情况下有更多的控制。例如,在从客户端提出请求起到服务器做出相应,其间要用去很长一段时间的情况下,这就可能有助于确保在继续处理脚本之前客户端仍是连通的。具有值 TRUE或FALSE。
Response.PICS(PICS字符串)
用于添加网页的PICS等级。PICS级别指明某一网页的内容级别,比如暴力或色情的程度等。
Response.Status="状态描述字符串"
用来设置Web服务器要响应的状态行的值。