ServerVariables 属性

来源:互联网 发布:阿里云 paas 编辑:程序博客网 时间:2024/04/30 19:56

 

ServerVariables 集合检索预定的环境变量。

语法

Request.ServerVariables (server environment variable) 
这个集合包含了两种值的结合体,一种是随同页面请求从客户端发送到服务器的HTTP报头中的值,另外一种是由服务器在接收到请求时本身所提供的值。 

参数

服务器环境变量
指定要检索的服务器环境变量名。可以使用下面列出的值。 变量说明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_TRANSLATEDPATH_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/revisionSERVER_SOFTWARE应答请求并运行网关的服务器软件的名称和版本。格式为 name/versionURL 提供 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>
“自引用”页面

  在ServerVariables集合中返回的值包含Web服务器的详细信息和当前页面的路径信息。在任何地方创建一个页面都可使用这些信息。例如创建一个“自引用”页面,此页面能够再次调用自身完成另一项任务,我们可以用以下代码:

<FORM ACTION=”<% = Request.ServerVariables(“PATH_INFO”) %>” METHOD=”POST”>
  同样的效果可以用HTTP的“SCRIPT_NAME”值获得:

<FORM ACTION=”<% = Request.ServerVariables(“SCRIPT_NAME”) %>” METHOD=”POST”>
  使用<A>元素打开一个不同页,可以使用:

...
<%
strFullPath = Request.ServerVariables(“PATH_INFO”)
‘Strip off the file name
strPathOnly = Left(strFullPath, InStrRev(strFullPath, “/”))
strNextPage = strPathOnly & “pages/next_page.asp”
%>
...
<A HREF=”<% = strNextPage %>”>Next Page</A>
...
  即使原始页面的名称或位置发生变化,这些实例都能正常工作,因为使用了当前页面的路径信息(当然,第二个例子在分离的目标页的名称发生变化时运行会失败)。

  换句话说,如果为搜索引擎的子会话自动建立URL,可以收集ServerVariable的一些值:

strFullURL = http:// & Request.ServerVariables(“LOCAL_ADDR”) _
& “:” & Request.ServerVariables(“SERVER_PORT”) _
& Request.ServerVariables(“PATH_INFO”)
  这将创建一个完整的URL包括端口号(这种情况下,不是标准值80)。例如,结果可能是:

http://194.74.60.254:1768/thispath/thispage.asp
  检测浏览器的版本


  ServerVariables集合中,另外一个有用的值是用户浏览器的用户代理字符串。在“Detecting the Browser Type”页面(browsertype.asp),使用ServerVariables集合中的“HTTP_USER_AGENT”值来获得用户代理字符串,一些脚本用来解析该信息并寻找生产厂家名称和浏览器版本。

<%
strUA = Request.ServerVariables(“HTTP_USER_AGENT”)
Response.Write “The User Agent string is <B>” & strUA & “</B>

If InStr(strUA, “MSIE”) Then
Response.Write “To upgrade your browser go to “_
& “<A HREF=” & Chr(34) & http://www.microsoft.com/ie/”_
& Chr(34) & “>http://www.microsoft.com/ie/<A>

intVersion = Cint(Mid(strUA, InStr(strUA, “MSIE”) + 5, 1))
If intVersion >=4 Then
Response.Write “You can use Microsoft Dynamic HTML”
End If
Else
If InStr(strUA, “Mozilla”) Then
If InStr(strUA, “compatible;”) = 0 Then
Response.Write “Your browser is probably Navigator. You can “_
& “download the latest version of Navigator from “_
& “<A HREF=” & Chr(34) & http://home.netscape.com/”_
& “download/”& Chr(34) & “>http://home.netscape.com”_
& “/download/</A>

intVersion = Cint(Mid(strUA, InStr(strUA, “/”) +1, 1))
If intVersion >= 4 Then
Response.Write “You can probably use Netscape Dynamic HTML”
End If
Else
strVersion = Mid(strUA, InStr(strUA, “compatible;”) + 12)
strProduct = Left(strVersion, InStr(strVersion, “ “))
Response.Write “Your browser is Navigator-compatible. You can”_
& “search for the manufacturer using a search engine, such as”_
& “<A HREF=” & Chr(34) _
& “http://www.altavista.digital.com/cgi-bin/query?q=”_
& strProduct _
& Chr(34) & “>http://www.altavista.com/</A>

End If
End If
End If
%>
  对IE 5.0和Navigator 4.61的搜索结果分别不同,对于其他厂家的浏览器,可以得到一个链接在Alta Vista Web站点自动开始搜索厂家的名称。

  注意,Netscape在用户代理字符串中不提供厂家的名称,因而无法绝对保证一个浏览器一定是Navigator。

  检测浏览器的语言

  ServerVariables集合中另外一个有用的值是“HTTP_ACCEPT_LANGUAGE”,它包含了一个当浏览器安装时指定的,或硬编码进用户的地区版本的语言代码。语言代码的例子有en-us(英国、美国)、de-at(德国、澳大利亚)和es-pe(西班牙、秘鲁)。

  语言代码可以是一般的且省略方言标识:例如,在我们的站点Wrox者,大批浏览者都是将en(英语)作为语言代码。

  因此,可以检测语言代码并自动装载一个合适的特定地区或指定语言版本的页面。

StrLocale = Lcase(Left(Request.ServerVariables(“HTTP_ACCEPT_LANGUAGE”),2))
Select Case strLocale
 Case “en”: Response.Redirect “http://uk_site.co.uk/”
 Case “de”: Response.Redirect “http://de_site.co.de/”
 Case “fr”: Response.Redirect “http://fr_site.co.fr/”
 ‘... etc
 Case Else: Response.Redirect “http://us_sitel.com/”
End Select
  或者根据特定的方言,重定向页面:

strLocale = Lcase(Request.ServerVariables(“HTTP_ACCEPT_LANGUAGE”))
Select Case strLocale
 Case “en-gb”: Response.Redirect “http://uk_site.co.uk/”
 Case “en-us”: Response.Redirect “http://us_site.com/”
 Case “es-pe”: Response.Redirect “http://es_site2.co.pe/”
 ‘...
 Case Else: Response.Redirect “http://us_site1.com/”
End Select
  其他有用的ServerVariables集合的值

  可以访问和使用ServerVariables集合中的任何一成员,控制ASP页面响应一个请求的方式。可以检查一个浏览者访问站点时使用的是否是缺省端口80或还是另一个。在这个例子里,寻找通过端口443的访问——这个端口提供的是安全套接字层(Secure Socket Layer,SSI)访问(和其他的协议),且将它们重定向到一个相应的页面。

If Request.ServerVariables(“SERVER_PORT”) = “443”) Then
Response.Redirect “/securesite/default.asp” ‘Secure user
Else
Response.Redirect “/normalsite/default.asp” ‘Non-secure user
End If
  假如要求浏览者注册且由服务器验证(而不是允许他们在Web服务器的IUSER帐号下匿名访问,这个问题将在后面章节中详细讨论),可以查询用户名称,来判定正在与我们打交道的用户是谁,是否装载页面给该用户。例如,下面的这个代码将只向名为Administrator的用户显示管理链接。

...
<A HREF=”dispcnfg.asp”>Change Display Configuration</A>

<A HREF=”dispcolr.asp”>Change Display Colors</A>

<A HREF=”keyboard.asp”>Change Keyboard Configuration</A>

<%
If Request.ServerVariables(“AUTH_USER”) _
= Ucase(Request.ServerVariables(“SERVER_NAME”)) & “/Administrator” Then
%>
<A HREF=”allusers.asp”>Administer All Users</A>

<A HREF=”usrlogon.asp”>Administer Logon Information</A>
<%
End If
%>
...
  注意ASP不填写ServerVariables集合直到你访问其中的一个成员。首次访问该集合的一个成员将使IIS得到它的全部,应只在需要时才使用ServerVariables集合。