AddHeader 方法用指定的值添加 HTML 标题。该方法常常向响应添加新的 HTTP 标题。它并不替代现有的同名标题。一旦标题被添加,将不能删除。
此方法仅供高级用户使用。若其他 Response 方法提供了您所需的功能,建议您使用该方法。
Response.AddHeader name, value
为避免命名不明确,name 中不能包含任何下划线字符 (_)。ServerVariables 集合将标题中的下划线字符解释为反斜杠。例如,下面的脚本使服务器查找一个名为 MY-HEADER 的标题名。
<% Request.ServerVariables("HTTP_MY_HEADER") %>
由于 HTTP 协议要求所有的标题都必须在内容之前发送,所以您必须在任何的输出(例如由 HTML 或 Write 方法生成的输出)发送到客户端之前在脚本中调用 AddHeader。但当 Buffer 属性被设置为 TRUE 时例外。若输出被缓冲,那么您就可以在脚本中的任何地方调用 AddHeader 方法,只要它在 Flush 之前执行即可。否则,对 AddHeader 的调用将产生一个运行错误。
下面的两个 .asp 文件对这一点进行了解释。
-------file1.asp--------- <% Response.AddHeader "WARNING", "Error Message Text" %> <HTML> Some text on the Web page. </HTML>
在前面的例子中,页没有缓冲。但是,因为在服务器将输出
Some text on the Web page
发送到客户端之前调用了 AddHeader 方法,所以脚本能正常工作。如果调换一下顺序,则对 AddHeader 方法的调用将产生一个运行时错误。
------file2.asp---------- <% Response.Buffer = TRUE %> <HTML> Here's some text on your Web page. <% Response.AddHeader "WARNING", "Error Message Text" %> Here's some more interesting and illuminating text. <% Response.Flush %> <%= Response.Write("some string") %> </HTML>
在前面的示例中,页被缓冲了,其结果是,直到此页上所有的 ASP 脚本执行后或 Flush 方法被调用后,服务器才会将输出发送到客户端。带缓冲的输出中对 AddHeader 的调用可在脚本的任何地方出现,只要在 Flush 调用之前即可。在前面的示例中,若对 AddHeader 的调用在对 Flush 的调用之后出现,脚本将产生一个运行时错误。
您可以通过这一方法用不同的值发送同一标题的多份拷贝,比如用 WWW-Authenticate 标题。
下面这个示例使用 AddHeader 方法要求客户端使用 BASIC 验证。
<% Response.Addheader "WWW-Authenticate", "BASIC" %>
注意 前面的脚本仅通知客户端浏览器使用哪个验证。若您在 Web 应用程序中使用该脚本,则一定要启用 Web 服务器的 BASIC 验证。
AppendToLog 方法将字符串添加到 Web 服务器日志条目的末尾。可以在脚本的同一部分中多次调用该方法。每次调用该方法时,都会在当前条目中添加指定的字符串。
Response.AppendToLog string
为使指定的字符串被记录到日志文件中,必须启用站点 Extended Logging 属性页的 URI Query 选项,该站点是要登录的活动站点。有关配置 Extended Logging 的详细信息,请参阅 Customizing W3C Extended Logging。
BinaryRead 方法获取作为 POST 请求的一部分而从客户端传送到服务器的数据。此方法获取来自客户端的数据并将其储存在 SafeArray 中。SafeArray 是一个数组,其中包含维数和边界信息。
variant = Request.BinaryRead(count)
BinaryRead 方法用于读取作为 POST 请求的一部分从客户端发出的未加工数据。此方法用于在底层访问数据,与此相反,Request.Form 集合用于查看在公告请求中发送的表格数据。一旦调用了 BinaryRead,则引用 Request.Form 集合中的任何变量都将导致错误发生。反之,一旦引用了 Request.Form 集合中的一个变量,则调用 BinaryWrite 也将导致错误发生。请记住,如果在访问 Request 集合中的变量时未指定该变量属于哪一个子集,将搜索 Request.Form 集合并强制使用上述规则。
下列示例使用 BinaryRead 方法将请求的内容放入一个安全的数组中。
<% Dim binread Dim bytecount bytecount = Request.TotalBytes binread = Request.BinaryRead(bytecount) %>
TotalBytes、ClientCertificate、Cookies、Form、QueryString、ServerVariables
BinaryWrite 方法不经任何字符转换就将指定的信息写到 HTTP 输出。该方法用于写非字符串信息(如客户端应用程序所需的二进制数据)。
Response.BinaryWrite data
如果有一个产生字节数组的对象,就如下调用 BinaryWrite 将这些生成的字节发送给客户端应用程序。
<% Set BinGen = Server.CreateObject(MY.BinaryGenerator) Pict = BinGen.MakePicture Response.BinaryWrite Pict %>
Buffer 属性指示是否缓冲页输出。当缓冲页输出时,只有当前页的所有服务器脚本处理完毕或者调用了 Flush 或 End 方法后,服务器才将响应发送给客户端。
服务器将输出发送给客户端后就不能再设置 Buffer 属性。因此,应该在 .asp 文件的第一行调用 Response.Buffer 。
Response.Buffer [= flag]
值 | 说明 |
FALSE | 不缓冲。该值是默认值。服务器在处理脚本的同时将输出发送给客户端。 |
TRUE | 除非当前页的所有 ASP 脚本处理完毕或调用了 Flush 或 End 方法,否则服务器不将响应发送给客户端。 |
如果当前 ASP 脚本缓冲设为 TRUE ,但未调用 Flush 方法,则服务器将使客户端的请求保持活动。由于服务器不必为每个客户端创建新的连接,从而节省了时间。
不过,缓冲将在服务器未处理完当前页的所有脚本之前阻止在客户端显示响应。对于长的脚本来说,有可能会感觉到延迟。
您可用元数据库中的 ASPBufferingOn 属性设置脚本缓冲默认值。关于使用元数据库的详细信息,请参阅程序员参考中的 IIS 元数据库。
CacheControl 属性忽略 Private 默认值。当你设置其属性为 Public 时, 代理服务器可以缓冲由 ASP 产生的输出。
Response.CacheControl [= Cache Control Header ]
Charset 属性将字符集名称(如 ISO-LATIN-7)附加到 Response 对象中 content-type 标题的后面。
Response.Charset(CharsetName)
对于不包含 Response.Charset 属性的 ASP 页,content-type 标题将为:
content-type:text/html
如果同样的 .asp 文件包含
<% Response.Charset("ISO-LATIN-7") %>
则 content-type 标题将为:
content-type:text/html; charset=ISO-LATIN-7
无论字符串表示的字符集是否有效,该功能都会将其插入 content-type 标题中。
如果某个页包含多个含有 Response.Charset 的标记,则每个 Response.Charset 都将替代前一个 CharsetName。这样,字符集将被设置为该页中 Response.Charset 的最后一个实例所指定值。
在 Macintosh 系统上,默认的 U.S. 字符集设置不是 ISO-LATIN-1。当处理文档时,用于 Macintosh 系统的个人 Web 服务器自动从 Macintosh 字符集转换为 ISO-Latin-1。在 U.S. 版本中,如果未使用 Response.Charset 转换字符集,而且用于 Macintosh 系统的个人 Web 服务器不转换字符集,那么所有网页都被假定为在 U.S. Macintosh 字符集中。
Clear 方法删除缓冲区中的所有 HTML 输出。但 Clear 方法只删除响应正文而不删除响应标题。可以用该方法处理错误情况。请注意,如果未将 Response.Buffer 设置为 TRUE,则该方法将导致运行时错误。
Response.Clear
ClientCertificate 集合从 Web 浏览器发布请求中获取验证字段(由 X.509 标准指定)。
如果 Web 浏览器使用 SSL3.0/PCT1 协议(也就是说,它使用以 https:// 开头的 URL,而不是 http://)连接服务器及服务器请求验证,则浏览器将发送验证字段。
如果没有发送验证,ClientCertificate 集合将返回 EMPTY。
必须先将 Web 服务器配置为要求客户端验证,然后才能使用 ClientCertificate 集合。
Request.ClientCertificate( Key[SubField] )
值 | 意义 |
Certificate | 按 ASN.1 格式的二进制流字符串,其中包括完整的验证内容。 |
Flags |
一组标志,提供其他客户端验证信息。可以设置下面的标志: ceCertPresent - 当前的客户端验证。 ceUnrecognizedIssuer - 该链上来自未知的发布者的最后一个验证。 注意 要使用以上标志,必须在 ASP 页中包含客户端验证包含文件。若您正在使用 VBScript,则应包含 cervbs.inc。这些文件安装在 \Inetpub\ASPSamp\Samples 目录下。 |
Issuer | 包含子字段值的列表的字符串,此列表包含验证发布者的信息。若该值在无 SubField 项的情况下指定,则 ClientCertificate 集合返回一个以逗号分隔的子字段列表。例如,C=US, O=Verisign 等。 |
SerialNumber | 包含验证的序列号的字符串,序列号以连字符 (-) 分隔的 16 进制 ASCII 码表示。例如,04-67-F3-02。 |
Subject | 包含子字段值的列表的字符串,此列表包含有关验证的主题信息。若该值在无 SubField 项的情况下指定,则 ClientCertificate 集合返回一个以逗号分隔的子字段列表。例如,C=US, O=Verisign 等。 |
ValidFrom | 指定验证何时有效。此日期遵循 VBScript 格式并随国家(地区)设置而变化。例如,在美国可表示为 9/26/96 11:59:59 PM. |
ValidUntil | 指定验证何时到期。 |
值 | 意义 |
C | 指定原国家(地区)名。 |
CN | 指定公用用户名。(此子字段仅同 Subject 关键字一起使用。) |
GN | 指定给定的名称。 |
I | 指定一组首字母。 |
L | 指定所在地。 |
O | 指定公司或组织名称。 |
OU | 指定机构的名称。 |
S | 指定州或省。 |
T | 指定此人或组织的头衔。 |
与在上述列表中所列的值不同,SubField 的值可被 ASN.1 标识所识别。ASN.1 标识的格式是一串通过句点 (.) 分隔的一系列数。例如: 3.56.7886.34。
可以通过关键字用循环来遍历 ClientCertificate 集合。下面的例子对此进行演示。
<% For Each key in Request.ClientCertificate Response.Write( key & ": " & Request.ClientCertificate(key) & "<BR>") Next %>
下面的示例使用 Subject
关键字测试客户端验证是否存在。
<% If Len(Request.ClientCertificate("Subject")) = 0 Response.Write("No client certificate was presented") End if %>
下面的示例获取发布客户端验证的公司的公用名。
<%= Request.ClientCertificate("IssuerCN") %>
下面的示例检查客户端验证主题的组织名。
<% If (Request.ClientCertificate("Subject")="Msft") Response.Write("Good Choice!") End if %>
下面的示例显示客户端验证何时到期。
This certification will expire on <%= Request.ClientCertificate("ValidUntil") %>
下面的示例使用 Flags
关键字测试客户端验证的发布者是不是已知的。第一行的 include 命令使脚本可使用已命名标志 ceUnrecognizedIssuer
。
<!--#include file="cervbs.inc" --> <% If Request.ClientCertificate("Flags") and ceUnrecognizedIssuer then Response.Write "Unrecognized issuer" End If %>
Cookies、Form、QueryString、ServerVariables
ContentType 属性指定响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/HTML。
Response.ContentType [= ContentType ]
下面的示例将内容类型设置为 Channel Definition Format(CDF)。
<% Response.ContentType = "application/x-cdf" %>
下面的示例将 ContentType 属性设置为其他的常见值。
<% Response.ContentType = "text/HTML" %> <% Response.ContentType = "image/GIF" %> <% Response.ContentType = "image/JPEG" %>
End 方法使 Web 服务器停止处理脚本并返回当前结果。文件中剩余的内容将不被处理。
Response.End
如果 Response.Buffer 已设置为 TRUE,则调用 Response.End 将缓冲输出。如果不希望将输出返回给用户,应调用
<% Response.Clear Response.End %>
ServerVariables 集合检索预定的环境变量。
Request.ServerVariables (server environment variable)
变量 | 说明 |
ALL_HTTP | 客户端发送的所有 HTTP 标题文件。 |
ALL_RAW | 检索未处理表格中所有的标题。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在标题文件名前面放置 HTTP_ prefix,并且标题名称总是大写的。使用 ALL_RAW 时,标题名称和值只在客户端发送时才出现。 |
APPL_MD_PATH | 检索 ISAPI DLL 的 (WAM) Application 的元数据库路径。 |
APPL_PHYSICAL_PATH | 检索与元数据库路径相应的物理路径。IIS 通过将 APPL_MD_PATH 转换为物理(目录)路径以返回值。 |
AUTH_PASSWORD | 该值输入到客户端的鉴定对话中。只有使用基本鉴定时,该变量才可用。 |
AUTH_TYPE | 这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。 |
AUTH_USER | 未被鉴定的用户名。 |
CERT_COOKIE | 客户端验证的唯一 ID,以字符串方式返回。可作为整个客户端验证的签字。 |
CERT_FLAGS |
如有客户端验证,则 bit0 为 1。 如果客户端验证的验证人无效(不在服务器承认的 CA 列表中),bit1 被设置为 1。 |
CERT_ISSUER | 用户验证中的颁布者字段(O=MS,OU=IAS,CN=user name,C=USA)。 |
CERT_KEYSIZE | 安全套接字层连接关键字的位数,如 128。 |
CERT_SECRETKEYSIZE | 服务器验证私人关键字的位数。如 1024。 |
CERT_SERIALNUMBER | 用户验证的序列号字段。 |
CERT_SERVER_ISSUER | 服务器验证的颁发者字段。 |
CERT_SERVER_SUBJECT | 服务器验证的主字段。 |
CERT_SUBJECT | 客户端验证的主字段。 |
CONTENT_LENGTH | 客户端发出内容的长度。 |
CONTENT_TYPE | 内容的数据类型。同附加信息的查询一起使用,如 HTTP 查询 GET、 POST 和 PUT。 |
GATEWAY_INTERFACE | 服务器使用的 CGI 规格的修订。格式为 CGI/revision。 |
HTTP_<HeaderName> |
HeaderName 存储在标题文件中的值。未列入该表的标题文件必须以 HTTP_ 作为前缀,以使 ServerVariables 集合检索其值。 注意 服务器将 HeaderName 中的下划线(_)解释为实际标题中的破折号。例如,如果您指定 HTTP_MY_HEADER,服务器将搜索以 MY-HEADER 为名发送的标题文件。 |
HTTPS | 如果请求穿过安全通道(SSL),则返回 ON。如果请求来自非安全通道,则返回 OFF。 |
HTTPS_KEYSIZE | 安全套接字层连接关键字的位数,如 128。 |
HTTPS_SECRETKEYSIZE | 服务器验证私人关键字的位数。如 1024。 |
HTTPS_SERVER_ISSUER | 服务器验证的颁发者字段。 |
HTTPS_SERVER_SUBJECT | 服务器验证的主字段。 |
INSTANCE_ID | 文本格式 IIS 实例的 ID。如果实例 ID 为 1,则以字符形式出现。使用该变量可以检索请求所属的(元数据库中)Web 服务器实例的 ID。 |
INSTANCE_META_PATH | 响应请求的 IIS 实例的元数据库路径。 |
LOCAL_ADDR | 返回接受请求的服务器地址。如果在绑定多个 IP 地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要。 |
LOGON_USER | 用户登录 Windows NT® 的帐号。 |
PATH_INFO | 客户端提供的额外路径信息。可以使用这些虚拟路径和 PATH_INFO 服务器变量访问脚本。如果该信息来自 URL,在到达 CGI 脚本前就已经由服务器解码了。 |
PATH_TRANSLATED | PATH_INFO 转换后的版本,该变量获取路径并进行必要的由虚拟至物理的映射。 |
QUERY_STRING | 查询 HTTP 请求中问号(?)后的信息。 |
REMOTE_ADDR | 发出请求的远程主机的 IP 地址。 |
REMOTE_HOST | 发出请求的主机名称。如果服务器无此信息,它将设置为空的 MOTE_ADDR 变量。 |
REMOTE_USER | 用户发送的未映射的用户名字符串。该名称是用户实际发送的名称,与服务器上验证过滤器修改过后的名称相对。 |
REQUEST_METHOD | 该方法用于提出请求。相当于用于 HTTP 的 GET、HEAD、POST 等等。 |
SCRIPT_NAME | 执行脚本的虚拟路径。用于自引用的 URL。 |
SERVER_NAME | 出现在自引用 UAL 中的服务器主机名、DNS 化名或 IP 地址。 |
SERVER_PORT | 发送请求的端口号。 |
SERVER_PORT_SECURE | 包含 0 或 1 的字符串。如果安全端口处理了请求,则为 1,否则为 0。 |
SERVER_PROTOCOL | 请求信息协议的名称和修订。格式为 protocol/revision 。 |
SERVER_SOFTWARE | 应答请求并运行网关的服务器软件的名称和版本。格式为 name/version 。 |
URL | 提供 URL 的基本部分。 |
如果客户端发送的标题文件在上述表格中找不到,可以在调用 Request.ServerVariables 中给标题文件名加上 HTTP_ 的前缀以检索其值。例如,如果客户端发送标题文件
SomeNewHeader:SomeNewValue
您可以通过使用下面的语法检索 SomeNewValue
<% Request.ServerVariables("HTTP_SomeNewHeader") %>
您可使用重述符以循环遍历所有的服务器变量名。例如,使用下面的脚本打印出所有的服务器名。
<TABLE> <TR><TD><B>Server Variable</B></TD><TD><B>Value</B></TD></TR> <% For Each name In Request.ServerVariables %> <TR><TD> <%= name %> </TD><TD> <%= Request.ServerVariables(name) %> </TD></TR> </TABLE> <% Next %>
下面的例子使用 Request 对象显示一些服务器变量。
<HTML> <!-- This example displays the content of several ServerVariables. --> ALL_HTTP server variable = <%= Request.ServerVariables("ALL_HTTP") %> <BR> CONTENT_LENGTH server variable = <%= Request.ServerVariables("CONTENT_LENGTH") %> <BR> CONTENT_TYPE server variable = <%= Request.ServerVariables("CONTENT_TYPE") %> <BR> QUERY_STRING server variable = <%= Request.ServerVariables("QUERY_STRING") %> <BR> SERVER_SOFTWARE server variable = <%= Request.ServerVariables("SERVER_SOFTWARE") %> <BR> </HTML>
下一个示例使用 ServerVariables 集合将服务器名插入一个超文本链接。
<A HREF = "http://<%= Request.ServerVariables("SERVER_NAME") %> /scripts/MyPage.asp">Link to MyPage.asp</A>
ClientCertificate, Cookies, Form, QueryString
Expires 属性指定了在浏览器上缓冲存储的页距过期还有多少时间。如果用户在某个页过期之前又回到此页,就会显示缓冲区中的版本。
Response.Expires [= number]
若此属性在一页上设置了多次,则使用最短的时间。
ExpiresAbsolute 属性指定缓存于浏览器中的页的到期日期和时间。在未到期之前,若用户返回到该页,该缓存的页就显示。如果未指定时间,该主页在当天午夜到期。如果未指定日期,则该主页在脚本运行当天的指定时间到期。
Response.ExpiresAbsolute [= [date] [time]]
如果该属性在页中被多次设置,则以最早到期的日期和时间为准。
以下示例指定页在 1996 年 5 月 31 日下午 1:30 分 15 秒到期。
<% Response.ExpiresAbsolute=#May 31,1996 13:30:15# %>
Flush 方法立即发送缓冲区中的输出。如果未将 Response.Buffer 设置为 TRUE,则该方法将导致运行时错误。
Response.Flush
如果在 ASP 页上调用 Flush 方法,则服务器将响应该页上保持活动的请求。
Form 集合通过使用 POST 方法的表格检索邮送到 HTTP 请求正文中的表格元素的值。
Request.Form(element)[(index)|.Count]
Form 集合按请求正文中参数的名称来索引。Request.Form(element) 的值是请求正文中所有 element 值的数组。通过调用 Request.Form(element).Count 来确定参数中值的个数。如果参数未关联多个值,则计数为 1。如果找不到参数,计数为 0 。
要引用有多个值的表格元素中的单个值,必须指定 index 值。index 参数可以是从 1 到 Request.Form(element).Count 中的任意数字。如果引用多个表格参数中的一个,而未指定 index 值,返回的数据将是以逗号分隔的字符串。
在使用 Request.Form 参数时,Web 服务器将分析 HTTP 请求正文并返回指定的数据。如果应用程序需要未分析的表格数据,可以通过调用不带参数的 Request.Form 访问该数据。
使用重述符可以遍历表格请求中的所有数据值。例如,用户通过指定两个值填写表格,Chocolate
和 Butterscotch
。对于 FavoriteFlavor
参数,您可以使用下面的脚本检索这些值。
<% For Each item In Request.Form("FavoriteFlavor") Response.Write item & "<BR>" Next %>
上述脚本显示如下。
Chocolate Butterscotch
使用 For...Next 循环可以生成同样的输出,如下列脚本所示。
<% For i = 1 To Request.Form("FavoriteFlavor").Count Response.Write Request.Form("FavoriteFlavor")(i) & "<BR>" Next %>
使用该复述符可以显示参数名。如下列脚本所示。
<% For Each x In Request.Form %> Request.Form( <%= x %> ) = <%= Request.Form(x) %> <BR> <% Next %>
该脚本在浏览器上显示下列信息。
FavoriteFlavor = Chocolate FavoriteFlavor = Butterscotch
请考虑下列表格。
<FORM ACTION = "/scripts/submit.asp" METHOD = "post"> <P>Your first name: <INPUT NAME = "firstname" SIZE = 48> <P>What is your favorite ice cream flavor: <SELECT NAME = "flavor"> <OPTION>Vanilla <OPTION>Strawberry <OPTION>Chocolate <OPTION>Rocky Road</SELECT> <p><INPUT TYPE = SUBMIT> </FORM>
下列的请求正文可以从该脚本中发送。
firstname=James&flavor=Rocky+Road
可以使用下面的脚本。
Welcome, <%= Request.Form("firstname") %>. Your favorite flavor is <%= Request.Form("flavor") %>.
下面的输出就是结果。
Welcome, James. Your favorite flavor is Rocky Road.
如果使用下面的脚本
The unparsed form data is: <%= Request.Form %>
结果为
The unparsed form data is: firstname=James&flavor=Rocky+Road
ClientCertificate, Cookies, QueryString, ServerVariables
IsClientConnected 属性只读,它指示自上次调用 Response.Write 之后,客户端是否与服务器相连。
Response.IsClientConnected ( )
该属性允许用户在客户端与服务器没有连接的情况下有更多的控制。例如,在从客户端提出请求起到服务器作出响应,其间要用去很长一段时间的情况下,这就可能有助于确保在继续处理脚本之前客户端仍是连通的。
<% 'check to see if the client is connected If Not Response.IsClientConnected Then 'get the sessionid to send to the shutdown function Shutdownid = Session.SessionID 'perform shutdown processing Shutdown(Shutdownid) End If %>
PICS 属性向响应标题的 pics 标签字段添加值。
Response.PICS(PICSLabel)
对于包含
<% Response.PICS("(PICS-1.1 <http://www.rsac.org/ratingv01.html> labels on " & chr(34) & "1997.01.05T08:15-0500" & chr(34) & " until" & chr(34) & "1999.12.31T23:59-0000" & chr(34) & " ratings (v 0 s 0 l 0 n 0))") %>
的 .asp 文件,将添加以下标题:
PICS-label:(PICS-1.1 <http://www.rsac.org/ratingv01.html> labels on "1997.01.05T08:15-0500" until "1999.12.31T23:59-0000" ratings (v 0 s 0 l 0 n 0))
PICS 属性在标题中插入任何字符串,不管它是否表示有效的 PICS 标签。
若一个单页包含多个包含 Response.PICS 的标记,则每个实例代替上一个 PICS 标签设置的 PICS 标签。结果是,PICS 将被设置为页中上一个 Response.PICS 实例所指定的值。
由于 PICS 标签包含引号,所以必须用 " & chr(34) & "
替换每个引号。
QueryString 集合检索 HTTP 查询字符串中变量的值。HTTP 查询字符串由问号 (?) 后的值指定。几个不同的进程都可以生成查询字符串。如,anchor 标记
<A HREF= "example?string=this is a sample">string sample</A>
生成值为 "this is a sample" 的变量名字符串。通过发送表格或由用户在其浏览器的地址框中键入查询也可以生成查询字符串。
Request.QueryString(variable)[(index)|.Count]
QueryString 集合是在 ServerVariables 集合中 QUERY_STRING 变量的分析版本 。它可以让您以名称检索 QUERY_STRING 变量。Request.QueryString (参数) 的值是出现在 QUERY_STRING 中所有参数 的值的数组。通过调用 Request.QueryString(parameter).Count 可以确定参数有多少个值。如果变量未关联多个数据集,则计数为 1。如果找不到变量,计数为 0。
要在多个数据集合的一个中引用 QueryString 变量,请指定 index 的值。index 参数可以是 1 到 Request.QueryString(variable).Count 中任意值。如果没有指定 index 的值,引用多个 QueryString 变量中的某个变量时,返回的数据是逗号分隔的字符串。
在 Request.QueryString 中使用参数时,服务器分析发送给请求的参数,并返回指定的数据。如果应用程序需要未分析的 QueryString 数据,可以通过调用不带参数的 Request.QueryString 检索到这个数据。
可以使用复述符在查询字符串中循环遍历所有的数据值。例如,如果发送以下的请求
http://NAMES.ASP?Q=Fred&Q=Sally
而且 Names.asp
包含下面的脚本,
---NAMES.ASP--- <% For Each item In Request.QueryString("Q") Response.Write item & "<BR>" Next %>
Names.asp
将显示如下。
Fred Sally
上述脚本也可以用 Count 来写。
<% For I = 1 To Request.QueryString("Q").Count Response.Write Request.QueryString("Q")(I) & "<BR>" Next %>
客户端请求
/scripts/directory-lookup.asp?name=fred&age=22
results in the following QUERY_STRING value.
name=fred&age=22.
QueryString 集合将包含 name
和 age
两个成员。那么,您就可以使用下面的脚本。
Welcome, <%= Request.QueryString("name") %>. Your age is <%= Request.QueryString("age") %>.
将输出
Welcome, Fred. Your age is 22.
如果使用下面的脚本
The unparsed query string is: <%=Request.QueryString %>
将输出
The unparsed query string is: name=fred&age=22
ClientCertificate、Cookies、Form、ServerVariables
Redirect 方法使浏览器尝试连接到其他 URL。
Response.Redirect URL
任何在页中显式设置的响应正文内容都将被忽略。然而,此方法不向客户端发送该页设置的其他 HTTP 标题。将产生一个将重定向 URL 作为链接包含的自动响应正文。Redirect 方法发送下列显式标题,其中 URL 是传递给该方法的值。
HTTP/1.0 302 Object Moved Location URL
Cookies 集合允许用户检索在 HTTP 请求中发送的 cookie 的值。
Request.Cookies(cookie)[(key)|.attribute]
名称 | 说明 |
HasKeys | 只读。指定 cookie 是否包含关键字。 |
可以通过包含一个 key 值来访问 cookie 字典的子关键字。如果访问 cookie 字典时未指定 key,则所有关键字都会作为单个查询字符串返回。例如,如果 MyCookie
有两个关键字, First
和 Second
,而在调用 Request.Cookies时并未指定其中任何一个关键字,那么将返回下列字符串。
First=firstkeyvalue&Second=secondkeyvalue
如果客户端浏览器发送了两个同名的 cookie,那么 Request.Cookie 将返回其中路径结构较深的一个。例如,如果有两个同名的的 cookie,但其中一个的路径属性为 /www/ 而另一个为 /www/home/,客户端浏览器同时将两个 cookie 都发送到 /www/home/ 目录中,那么 Request.Cookie 将只返回第二个 cookie。
要确定某个 cookie 是不是 cookie 字典(cookie 有否有关键字),可使用下列脚本。
<%= Request.Cookies("myCookie").HasKeys %>
如果 myCookie
是一个 cookie 字典,则前面的赋值为 TRUE。否则,为 FALSE。
可以通过循环遍历 Cookies 集合中的所有 cookie 或 cookie 中的所有关键字。但是,通过关键字在没有关键字的 cookie 上遍历将不产生任何输出。使用 HasKeys 语法先检查一下 cookie 是否有关键字,可以避免这种情况。下面的例子对此进行演示。
<% 'Print out the entire cookie collection. For Each cookie in Request.Cookies If Not cookie.HasKeys Then 'Print out the cookie string %> <%= cookie %> = <%= Request.Cookies(cookie)%> <% Else 'Print out the cookie collection For Each key in Request.Cookies(cookie) %> <%= cookie %> (<%= key %>) = <%= Request.Cookies(cookie)(key)%> <% Next End If Next %>
下面的例子打印 Web 页中的 myCookie
的值。
这是名为 myCookie 的 cookie 值: <%= Request.Cookies("myCookie") %>
ClientCertificate、Form、QueryString、ServerVariables
Request 对象在 HTTP 请求期间,检索客户端浏览器传递给服务器的值 。
Request[.collection|property|method](variable)
ClientCertificate | 存储在发送到 HTTP 请求中客户端证书中的字段值。 |
Cookies | HTTP 请求中被发送的 cookie 的值。 |
Form | HTTP 请求正文中表格元素的值。 |
QueryString | HTTP 中查询字符串中变量的值。 |
ServerVariables | 预定的环境变量的值。 |
TotalBytes | 只允许读。指定客户端在请求正文中发送的字节总数。 |
BinaryRead | 检索从客户端发送到服务器作为 POST 请求的一部分的数据。 |
变量参数是一些字符串,这些字符串指定要从集合中检索的项目,或作为方法或属性的输入。有关 variable 参数的详细信息,请参阅各集合说明。
如果指定的变量不是上述的五个集合中的一个,Request 对象返回 EMPTY。
可以通过调用 Request(variable) 直接使用所有的变量,而不需要集合的名称。正因为这样,Web 服务器可以按照下面的顺序搜索集合。
如果同名的变量出现在多个集合中,Request 对象返回遇到的第一个实例。
我们建议在涉及 ServerVariables 集合的成员时使用全名。例如,不用 Request.(AUTH_USER) 而用Request.ServerVariables(AUTH_USER) 。
Cookies 集合设置 cookie 的值。若指定的 cookie 不存在,则创建它。若存在,则设置新的值并且将旧值删去。
Response.Cookies(cookie)[(key)|.attribute] = value
名称 | 说明 |
Domain | 只允许写。若被指定,则 cookie 将被发送到对该域的请求中去。 |
Expires | 只允许写。cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。 |
HasKeys | 只允许读。指定 cookie 是否包含关键字。 |
Path | 只允许写。若被指定,则 cookie 将只发送到对该路径的请求中。如果未设置该属性,则使用应用程序的路径。 |
Secure | 只允许写。指定 cookie 是否安全。 |
如果创建了一个带有关键字的 cookie,如下列脚本所示,
<% Response.Cookies("mycookie")("type1") = "sugar" Response.Cookies("mycookie")("type2") = "ginger snap" %>
则此标题将被发送出去。
Set-Cookie:MYCOOKIE=TYPE1=sugar&TYPE2=ginger+snap
如果在指定 myCookie
时不指定关键字,将破坏 type1
和 type2
。如下面示例所示。
<% Response.Cookies("myCookie") = "chocolate chip" %>
在前面的示例中,关键字 type1
和 type2
被破坏且其值也被删除。myCookie
cookie 只有 chocolate chip
的值。
反之,如果您用一个关键字调用 cookie,就会毁坏 cookie 包含的任何无关键字的值。例如,如果在上述代码后,用下面的语句调用 Response.Cookies,
<% Response.Cookies("myCookie")("newType") = "peanut butter" %>
则 chocolate chip
的值将被删除且 newType
会被设置为 peanut butter
。
要确定 cookie 是否有关键字,可使用下面的语法。
<%= Response.Cookies("myCookie").HasKeys %>
如果 myCookie
是一个 cookie 字典,则前面的值为 TRUE。否则,为 FALSE。
可以通过循环来设置 cookie 的属性。例如,要将所有的 cookie 设置为在一个特定的日期到期,可使用下面的语法。
<% For Each cookie in Response.Cookies Response.Cookie(cookie).Expires = #July 4, 1997# Next %>
您可以使用一个循环设置一个集合中的所有 cookie 或一个 cookie 中的所有关键字。然而,循环在 cookie 没有关键字时若被引用将不会执行。为避免这种情况,你可以先使用 .HasKeys 语法检查一个 cookie 是否有关键字。下面的示例对此进行说明。
<% If Not cookie.HasKeys Then 'Set the value of the cookie Response.Cookies(cookie) = "" Else 'Set the value for each key in the cookie collection For Each key in Response.Cookies(cookie) Response.Cookies(cookie)(key) = "" Next key %>
下面的示例说明如何设置 cookie 的值以及如何为其属性赋值。
<% Response.Cookies("Type") = "Chocolate Chip" Response.Cookies("Type").Expires = "July 31, 1997" Response.Cookies("Type").Domain = "msn.com" Response.Cookies("Type").Path = "/www/home/" Response.Cookies("Type").Secure = FALSE %>
使用 Response 对象可以将输出发送到客户端。
Response.collection|property|method
cookie | 指定 cookie 值。可以使用该集合设置 cookie 的值。 |
Buffer | 表明页输出是否被缓冲。 |
CacheControl | 决定代理服务器是否能缓存 ASP 生成的输出。 |
Charset | 将字符集的名称添加到内容类型标题中。 |
ContentType | 指定响应的 HTTP 内容类型。 |
Expires | 在浏览器中缓存的页面超时前,指定缓存的时间。 |
ExpiresAbsolute | 指定浏览器上缓存页面超时的日期和时间。 |
IsClientConnected | 表明客户端是否与服务器断开。 |
Pics | 将 PICS 标记的值添加到响应的标题的 PICS 标记字段中。 |
Status | 服务器返回的状态行的值。 |
AddHeader | 从 名称 到 值 设置 HTML 标题。 |
AppendToLog | 在该请求的 Web 服务器日志条目后添加字符串。 |
BinaryWrite | 将给出信息写入到当前 HTTP 输出中,并且不进行任何字符集转换。 |
Clear | 清除任何缓冲的 HTML 输出。 |
End | 停止处理 .asp 文件并返回当前的结果。 |
Flush | 立即发送缓冲的输出。 |
Redirect | 将重指示的信息发送到浏览器,尝试连接另一个 URL。 |
Write | 将变量作为字符串写入当前的 HTTP 输出。 |
Status 属性指定服务器返回的状态行的值。HTTP 规格中定义了 Status 值。
Response.Status = StatusDescription
使用该属性修改服务器返回的状态行。
下面示例设置响应状态。
<% Response.Status = "401 Unauthorized" %>
TotalBytes 属性指定客户端在请求正文中发送的总字节数。该属性只允许读。
Counter = Request.TotalBytes
以下脚本设置一个等于请求对象中包括的总字节数的变量。
<% Dim bytecount bytecount = Request.TotalBytes %>
Write 方法将指定的字符串写到当前的 HTTP 输出。
Response.Write variant
以下示例用 Response.Write 方法将输出发送到客户端。
I just want to say <% Response.Write "Hello World." %> Your name is: <% Response.Write Request.Form("name") %>
以下示例将 HTML 标记添加到 Web 页输出。由于 Write 方法返回的字符串不包含字符组合 %>,代之的是 %\>。以下脚本
<% Response.Write "<TABLE WIDTH = 100%\>" %>
输出
<TABLE WIDTH = 100%>