Request和Response這兩個對象是ASP所提供的內(nèi)置對象中最常用的兩個。在瀏覽器(或其他用戶代理)和Web服務(wù)器之間,請求與響應(yīng)中發(fā)生的信息交流可以通過ASP中的兩個內(nèi)置對象來進行訪問和管理,這兩個對象稱為Request和Response對象。
在ASP頁中所要進行的工作幾乎都要訪問這兩個對象,使用這兩個對象的方式將影響頁面的效率及可靠性。當然,它們的主要用途是訪問用戶發(fā)回到服務(wù)器的值,即從HTML頁的<FORM>段獲得或附在URL后面作為查詢字符串,并創(chuàng)建合適的輸出返回給用戶,且它們可以共享很多相同的因素。例如兩個對象都可以使用存儲在客戶端計算機上的cookie。
因此,我們把內(nèi)容分成兩個獨立的部分(每個對象一部分),并且首先從客戶端與服務(wù)器這間的信息交流入手,然后再研究每一個對象。
研究的內(nèi)容是:
· 客戶端與服務(wù)器如何交流以傳遞Web或其他資源。
· Request和Response對象的細節(jié),以及它們之間的共同點。
· 如何通過一個窗體和查詢字符串訪問相應(yīng)的值。
· 如何讀入或創(chuàng)建cookie并存放在客戶端的計算機上。
· 服務(wù)器的變量是什么?如何訪問和修改HTTP報頭。
· 說明其他相關(guān)條目的變化,如客戶的證書使用。
客戶端和服務(wù)器的交流
為節(jié)省篇幅,后面的內(nèi)容中使用“瀏覽器”(browser)一詞。但需要記住的是,能夠訪問Web頁面的應(yīng)用程序絕不僅只有瀏覽器,有許多特殊的應(yīng)用程序從站點上下載網(wǎng)頁,如為那些視力有缺陷用戶設(shè)計的特殊的客戶端程序或者是用通常的瀏覽器有其他困難的人。最顯而易見的例子是搜索引擎用來訪問Web上的站點的robot。全面考慮這些因素,包括普通的Web瀏覽器,準確的詞匯應(yīng)該是用戶代理(user agent)。
頁面請求的對話
當一個瀏覽器向Web站點提出頁面請求時,顯然必須告訴服務(wù)器,其請求的是哪一個頁面。首先要做的是通過域名與服務(wù)器建立連接,然后提供所請求的頁面的全路徑和名稱。為什么要全路徑和名稱?Web是一個無國界的環(huán)境,所以必須創(chuàng)造一個會話標識每個客戶(將在以后介紹ASP如何做到這點)。
這就意味著每當服務(wù)器完成向客戶發(fā)送頁面后,服務(wù)器就徹底忘記了這個客戶。因此,當客戶請求下一個頁面時,與一個新的訪問者是完全相同的。服務(wù)器無法記住這個客戶,相應(yīng)的,也就無法判斷它們上次請求的頁面是哪一個。因為,不能使用相對路徑來提供一個頁面,即使頁面包含一個相對的鏈接也不行,例如:
<A HREF=”Download.asp”>Next Page</A>
瀏覽器將自動建立完整的新頁面的URL,方法是使用當前頁的域和路徑;或使用頁面<HEAD>段中的<BASE>元素,告訴瀏覽器一個頁面中所有鏈接的其URL是什么。例如:
<BASE HERF=http://www.wrox.com/Store>
當把鼠標指向一個頁面的鏈接時,可在瀏覽器的狀態(tài)欄中看到。當前頁面的路徑和當前域名或基域名或基路徑已經(jīng)與請求的頁面名結(jié)合在一起了。
1、客戶請求的細節(jié)
所請求頁面的全路徑和名稱的組合是瀏覽器請求頁面時發(fā)住服務(wù)器的住處瀏覽器的請求也能包含瀏覽器宿主的住處和客戶端運行的操作系統(tǒng)。實際的信息內(nèi)容將隨著瀏覽器的不同而有相應(yīng)的變化,只有很少一部分能夠由其他的應(yīng)用程序如搜索引擎robot提供。為了更清楚地了解該信息,下面是從IE 5.0發(fā)出的一個對頁面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
從中可以看出,這些信息中有關(guān)于用戶代理和用戶連接的細節(jié)(如缺省的語言),也有能夠接受的文件或應(yīng)用程序的類型列表,這些都是MIME類型的,在后面將會見到更多。瀏覽器能夠接受幾種圖像文件及多種Microsoft Office文件類型。“標準”的文件類型,如tesx/html和text/text沒有列在其中。文件列表中*/*表示可向瀏覽器發(fā)回任何類型的文件,由瀏覽器解釋或通過一個插件(plug-in)應(yīng)用程序來進行解釋。
cookie: 條目包含的cookie存放在客戶端的計算機上,并僅對該域有效。假如請求是點擊鏈接的結(jié)果,而不是在瀏覽器的地址欄直接輸入URL,則Referer:條目被顯示出來,它包含了鏈接頁面的完整的URL。
Host:條目包含客戶計算機的IP地址或名稱。然而,這還不足以準確辨別客戶機。因為它們通過ISP連接時,IP地址是動態(tài)分配的,或者通過一個代理服務(wù)器連接時,IP地址是代理機的而不是實際的客戶機的。
在ASP頁中所要進行的工作幾乎都要訪問這兩個對象,使用這兩個對象的方式將影響頁面的效率及可靠性。當然,它們的主要用途是訪問用戶發(fā)回到服務(wù)器的值,即從HTML頁的<FORM>段獲得或附在URL后面作為查詢字符串,并創(chuàng)建合適的輸出返回給用戶,且它們可以共享很多相同的因素。例如兩個對象都可以使用存儲在客戶端計算機上的cookie。
因此,我們把內(nèi)容分成兩個獨立的部分(每個對象一部分),并且首先從客戶端與服務(wù)器這間的信息交流入手,然后再研究每一個對象。
研究的內(nèi)容是:
· 客戶端與服務(wù)器如何交流以傳遞Web或其他資源。
· Request和Response對象的細節(jié),以及它們之間的共同點。
· 如何通過一個窗體和查詢字符串訪問相應(yīng)的值。
· 如何讀入或創(chuàng)建cookie并存放在客戶端的計算機上。
· 服務(wù)器的變量是什么?如何訪問和修改HTTP報頭。
· 說明其他相關(guān)條目的變化,如客戶的證書使用。
客戶端和服務(wù)器的交流
為節(jié)省篇幅,后面的內(nèi)容中使用“瀏覽器”(browser)一詞。但需要記住的是,能夠訪問Web頁面的應(yīng)用程序絕不僅只有瀏覽器,有許多特殊的應(yīng)用程序從站點上下載網(wǎng)頁,如為那些視力有缺陷用戶設(shè)計的特殊的客戶端程序或者是用通常的瀏覽器有其他困難的人。最顯而易見的例子是搜索引擎用來訪問Web上的站點的robot。全面考慮這些因素,包括普通的Web瀏覽器,準確的詞匯應(yīng)該是用戶代理(user agent)。
頁面請求的對話
當一個瀏覽器向Web站點提出頁面請求時,顯然必須告訴服務(wù)器,其請求的是哪一個頁面。首先要做的是通過域名與服務(wù)器建立連接,然后提供所請求的頁面的全路徑和名稱。為什么要全路徑和名稱?Web是一個無國界的環(huán)境,所以必須創(chuàng)造一個會話標識每個客戶(將在以后介紹ASP如何做到這點)。
這就意味著每當服務(wù)器完成向客戶發(fā)送頁面后,服務(wù)器就徹底忘記了這個客戶。因此,當客戶請求下一個頁面時,與一個新的訪問者是完全相同的。服務(wù)器無法記住這個客戶,相應(yīng)的,也就無法判斷它們上次請求的頁面是哪一個。因為,不能使用相對路徑來提供一個頁面,即使頁面包含一個相對的鏈接也不行,例如:
<A HREF=”Download.asp”>Next Page</A>
瀏覽器將自動建立完整的新頁面的URL,方法是使用當前頁的域和路徑;或使用頁面<HEAD>段中的<BASE>元素,告訴瀏覽器一個頁面中所有鏈接的其URL是什么。例如:
<BASE HERF=http://www.wrox.com/Store>
當把鼠標指向一個頁面的鏈接時,可在瀏覽器的狀態(tài)欄中看到。當前頁面的路徑和當前域名或基域名或基路徑已經(jīng)與請求的頁面名結(jié)合在一起了。
1、客戶請求的細節(jié)
所請求頁面的全路徑和名稱的組合是瀏覽器請求頁面時發(fā)住服務(wù)器的住處瀏覽器的請求也能包含瀏覽器宿主的住處和客戶端運行的操作系統(tǒng)。實際的信息內(nèi)容將隨著瀏覽器的不同而有相應(yīng)的變化,只有很少一部分能夠由其他的應(yīng)用程序如搜索引擎robot提供。為了更清楚地了解該信息,下面是從IE 5.0發(fā)出的一個對頁面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
從中可以看出,這些信息中有關(guān)于用戶代理和用戶連接的細節(jié)(如缺省的語言),也有能夠接受的文件或應(yīng)用程序的類型列表,這些都是MIME類型的,在后面將會見到更多。瀏覽器能夠接受幾種圖像文件及多種Microsoft Office文件類型。“標準”的文件類型,如tesx/html和text/text沒有列在其中。文件列表中*/*表示可向瀏覽器發(fā)回任何類型的文件,由瀏覽器解釋或通過一個插件(plug-in)應(yīng)用程序來進行解釋。
cookie: 條目包含的cookie存放在客戶端的計算機上,并僅對該域有效。假如請求是點擊鏈接的結(jié)果,而不是在瀏覽器的地址欄直接輸入URL,則Referer:條目被顯示出來,它包含了鏈接頁面的完整的URL。
Host:條目包含客戶計算機的IP地址或名稱。然而,這還不足以準確辨別客戶機。因為它們通過ISP連接時,IP地址是動態(tài)分配的,或者通過一個代理服務(wù)器連接時,IP地址是代理機的而不是實際的客戶機的。