通過XMLHttpRequest對象向伺服器發送請求是一件相當直接的事情。我們需 要做的所有事情就是給它傳遞一個伺服器頁面的URL,這個頁面將產生資料。就 像下面這樣:
XMLHttpRequest支援大量的HTTP調用語義,包括用來動態產生頁面的可選查 詢字串參數(你可能已經知道這些CGI參數、Form參數或者ServletRequest參數 ,取決於伺服器端開發背景)。在考察請求對象如何支援這些功能之前,我們先 來快速回顧一下HTTP的基礎知識。
HTTP快速入門
HTTP對於網際網路而言可謂是無處不在,以至於我們通常都對它熟視無睹。在 編寫傳統的Web應用時,我們近距離接觸HTTP協議的地方通常是定義一個超連結 或者為一個表單設定method屬性。而對於Ajax而言,我們可以深入那些協議的底 層細節,這使得我們可以做一些驚人的事情。
瀏覽器和Web伺服器之間的HTTP事務包括瀏覽器發起的一個請求和隨後伺服器 返回的一個響應(其中也包括執行Web開發人員編寫的聰明絕頂、激動人心的代碼 ,這一點毫無疑問)。請求和響應本質上來講都是文字資料流,用戶端和伺服器將它 們解釋為首部資訊和緊隨其後的主體部分。你可以將首部資訊想像為寫在信封上 的地址欄,而主體部分是信封中的信件。首部資訊簡單地指示接收方應該如何處 理信件的內容。
一個HTTP請求主要由首部資訊和可能包含一些資料或參數的主體部分組成。 響應則通常包含返回頁面的HTML標記。Mozilla瀏覽器包含了一個很有用的工具 ,叫做LiveHTTPHeaders(見本章“資源”一節以及附錄A)。我們來查 看一下在瀏覽器工作時,那些請求和響應的首部資訊的內容。開啟Google的首頁 ,看看在底層發生了些什麼事情。
我們發送的第一個請求包含有這樣的首部資訊:
GET / HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0
(Windows; U; Windows NT 5.0; en-US; rv:1.7)
Gecko/20040803 Firefox/0.9.3
Accept: text/xml,application/xml,
application/xhtml+xml,text/html;q=0.9,
text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PREF=ID=cabd38877dc0b6a1:TM=1116601572
:LM=1116601572:S=GD3SsQk3v0adtSBP
第一行告訴我們使用的是哪個HTTP方法。大部分Web開發人員都很熟悉GET,這 是用來擷取文檔的;還有POST,這是用來提交HTML表單的。全球資訊網聯盟(W3C)的規 約還包括了一些其他的通用方法,包括HEAD,用來擷取一個檔案的首部資訊;PUT ,用於向伺服器上傳文檔;DELETE,用來刪除伺服器上的文檔。後續的首部資訊 是用來進行溝通的,用戶端告訴伺服器它所能支援的內容類型、字元集等等。因 為我之前曾經訪問過Google,它還發送了一個cookie,這段簡短的訊息告訴 Google我是誰。