向瀏覽器傳送內容

2021-04-15 07:40:13 字數 4076 閱讀 9008

在處理 asp 指令碼時,任何沒有包含在 asp 定界符或 標記中的文字或圖形都將被簡單地返回給瀏覽器。可以通過使用 response 物件顯示地把內容傳送給瀏覽器。

傳送內容

要將內容從 asp 定界符內部或過程傳送給瀏覽器,可以使用 response 物件的 write 方法。例如,下面的語句可以根據使用者是否訪問過此頁而傳送不同的問候語:

<%

if firsttime = true then

response.write ""

else

response.write ""

end if

%>

在過程外部,不必使用 response.write 將內容送回使用者。不在指令碼定界符內部的內容被直接傳送給瀏覽器,瀏覽器將其格式化和顯示。例如,下面的指令碼過程與上面的指令碼輸出相同:

當您只需要將輸出返回一次或很方便地向現有 html 文字中加入語句時,可使用混合指令碼命令和 html。當您不想用定界符分隔一條語句或當您想建立返回給瀏覽器的字串時,可使用 response.write。例如,可構建乙個文字的字串,用從乙個 html 表送回的值建立**的一行:

response.write "" & request.form("firstname") _

& "" & request.form("lastname") & "

" request.form 返回從 html **(參閱 使用 html **)傳送的值。(&) 字元是 vbscript 字串連線字元。

設定內容的型別

當 web 伺服器將檔案返回給瀏覽器時,會同時告訴瀏覽器檔案中包含的內容的型別。這使瀏覽器能夠決定是否它能自己顯示檔案或必須呼叫另乙個應用程式。例如,如果網路伺服器返回 microsoft excel **,則瀏覽器必須呼叫 microsoft excel 的副本顯示此頁。web 伺服器通過將檔案的副檔名對映到 mime 型別表來識別檔案型別。

可以使用 response 物件的 contenttype 屬性為傳送給使用者的內容設定 http 內容型別字串。例如,下面的命令為通道定義設定內容型別:

有關通道的詳細資訊,請參閱本主題中的「建立動態通道」。

重定向瀏覽器

用 redirect 方法可將瀏覽器重定向到另乙個 url,而不是將內容傳送給使用者。例如,如果您想確認使用者是否已從主頁進入了您的應用程式,以便能收到乙個客戶 id,則可以檢驗他們是否有客戶 id 號;如果沒有,就可以將其重定向到主頁。

<%

if session("customerid") = 0 then

response.redirect "homepage.asp"

end if

%>

除非緩衝區已經開啟,否則,在任何內容或標題返回給瀏覽器之前,您必須重定向瀏覽器。將 response.redirect 語句放在頁的頂部和標記之前可確保沒有任何內容返回給瀏覽器。如果在返回給瀏覽器的內容或標題後使用 response.redirect,將看到乙個錯誤資訊。

如果在頁的中間使用 response.redirect,請將其與 response.buffer 屬性一起使用,下面的部分將進行解釋。

緩衝內容

預設情況下,web 伺服器返回 html 和在處理 asp 頁時的指令碼處理結果。但是,您可以設定 response 物件的 buffer 屬性以便在向使用者傳送任何內容之前,先處理頁上的所有的伺服器指令碼命令。

可以使用緩衝技術來確定在頁處理過程中的某個點,而您並不想將該點之前的內容傳送給使用者。也可以用 response 物件的 redirect 方法將使用者重定向到另一頁,或者用 response 物件的 clear 方法清除緩衝區並將不同的內容傳送給使用者。下面的例子使用了以上兩種方法。

<%

response.buffer = true %>

. .

. <%

if request("fname") = "" then

response.clear

response.redirect "/samples/test.html"

else

response.write request("fname")

end if

%>

也可以使用 response.buffer 避免 web 伺服器在指令碼修改 http 標題之前將其返回。有些屬性和方法,例如 response.expires 和 response.redirect 可修改 http 標題。

當在指令碼中設定 buffer 屬性並且沒有呼叫 flush 方法時,伺服器將保持使用者發出的 keep-alive 請求。養成這樣的指令碼編寫習慣有益於提高伺服器的效能,因為,伺服器不必為每乙個使用者請求建立新的連線(假定伺服器、使用者和任何**伺服器都支援 keep-alive 要求)。但是,這種方法的乙個潛在的不利因素是:在使用者處理完當前的 asp 檔案的所有的指令碼之前,緩衝區不顯示任何響應給使用者。對於較長的和較複雜的指令碼,使用者可能要被迫等待很長一段時間才能看到這一頁。

預設情況下,緩衝區對於 asp 應用程式是關閉的。可以使用 internet 服務管理器為整個 asp 應用程式開啟緩衝區。

允許**伺服器快取頁

通過**伺服器,應用程式可以傳送頁給使用者。**伺服器代替使用者瀏覽器從 web 站點請求網頁。**伺服器快取 html 頁以便相同頁的重複請求能夠快速有效地返回給瀏覽器。**伺服器執行請求並快取網頁,並減輕網路和 web 伺服器的負荷。

儘管快取對 html 頁都能很好執行,但對包含動態生成資訊的 asp 頁則不盡人意。例如,報告****或顯示大量業務的存貨清單需要提供即時資訊。一小時前的資訊對目前來講是很不準確的。如果應用程式返回個人的資訊,例如,自定義的主頁,希望使用者不能看到另乙個使用者的個人資訊。

預設情況下,asp 命令**伺服器自己不能快取 asp 頁(儘管快取影象、位圖、小型應用程式,和其他快取頁上的參考項)。可以使用 response.cachecontrol 屬性設定快取控制 http 標題字段允許快取某一頁。response.cachecontrol 的預設值是字串 "private",它避免**伺服器快取此頁。要允許快取,可將快取控制標題字段設定為 public:

<% response.cachecontrol = "public" %>

因為在任何頁的內容被傳送之前,http 標題必須被送給瀏覽器或**伺服器,所以,可在任何 html 標記之前設定 response.cachecontrol 屬性或使用 response.buffer 快取此頁。

快取控制標題欄位是 http 1.1 規格的一部分。在只支援 http 1.0 的**伺服器上不能快取 asp 頁,因為沒有到期的標題字段傳送。

避免瀏覽器快取頁

<% response.expires = 0 %>

值為 0 強迫快取頁到期。因為在任何頁被傳送之前,http 標題必須被送給瀏覽器,所以可通過將 response.expires 屬性放在 html 標記之前或使用 response.buffer 快取該頁。

建立動態通道

下面是乙個有關如何使用通道的示例。下面的 html **要求使用者選擇通道。提交時,該**呼叫 .cdx 檔案的指令碼去建立通道的定義。

choose the channels you want.

chan.cdx 中的指令碼根據與請求一起提交的**的值建立通道定義。

<% if request.form("movies") <> "" then %>

channel definition statements for the movie pages

<% end if %>

<% if request.form("sports") <> "" then %>

channel definition statements for the sports pages

<% end if %>

向伺服器傳送檔案

瀏覽器可以使用 posting acceptor 應用程式將檔案傳送給 web 伺服器。當 posting acceptor 上載檔案時,將傳送列出每乙個收到的檔名稱和位置的 url-encoded **字段。可以將郵遞處理的 url 新增到指令碼中,此指令碼上載檔案去呼叫 asp 指令碼來處理這些欄位名。例如,可以編寫乙個指令碼,自動地通過檔案的名稱和位置傳送 e-mail 給系統管理員。 

瀏覽器傳送cookie規則

前言 cookie與session的機制通過其他部落格去了解,這裡只講瀏覽器將cookie返回給伺服器的時候的依據。瀏覽器在傳送請求之前,首先會根據請求url中的網域名稱在cookie列表中找所有與當前網域名稱一樣的cookie,然後再根據指定的路徑進行匹配,如果當前請求在域匹配的基礎上還與路徑匹配...

模擬瀏覽器傳送請求報文

import socket 建立socket物件 socket con socket.socket socket.af inet,socket.sock stream 連線指定伺服器位址 拼接請求報文 請求行 請求頭,必須要寫明host,原因是因為,之前連線就相當於找到了教室 這裡的host則相當於...

模擬瀏覽器傳送請求報文

import socket 建立socket物件 socket con socket.socket socket.af inet,socket.sock stream 連線指定伺服器位址 拼接請求報文 請求行 請求頭,必須要寫明host,原因是因為,之前連線就相當於找到了教室 這裡的host則相當於...