AJAX快速入門之HTTP協(xié)議基礎(chǔ)_AJAX教程
推薦:AJAX之xmlHttpscript type=text/javascript language=javascript !-- //以XML求取數(shù)據(jù) function XmlPost(theEmail) { var webFileUrl = ../User/CheckUser.aspx?LogonName= + theEmail; var result = ; if (window.ActiveXObject) { xmlHttp = new ActiveXObject(
要很好地領(lǐng)會(huì)Ajax技術(shù)的關(guān)鍵是了解超文本傳輸協(xié)議(HTTP),該協(xié)議用來傳輸網(wǎng)頁、圖像以及因特網(wǎng)上在瀏覽器與服務(wù)器間傳輸?shù)钠渌愋臀募�。只要你在瀏覽器上輸入一個(gè)URL,最前面的http://就表示使用HTTP來訪問指定位置的信息。(大部分瀏覽器還支持其他一些不同的協(xié)議,其中FTP就是一個(gè)典型例子。)注意:本文中只涉及HTTP協(xié)議,這是Ajax開發(fā)人員關(guān)心的方面,它可作為HTTP的參考手冊(cè)或指南。
HTTP由兩部分組成:請(qǐng)求和響應(yīng)。當(dāng)你在Web瀏覽器中輸入一個(gè)URL時(shí),瀏覽器將根據(jù)你的要求創(chuàng)建并發(fā)送請(qǐng)求,該請(qǐng)求包含所輸入的URL以及一些與瀏覽器本身相關(guān)的信息。當(dāng)服務(wù)器收到這個(gè)請(qǐng)求時(shí)將返回一個(gè)響應(yīng),該響應(yīng)包括與該請(qǐng)求相關(guān)的信息以及位于指定URL(如果有的話)的數(shù)據(jù)。直到瀏覽器解析該響應(yīng)并顯示出網(wǎng)頁(或其他資源)為止。
HTTP請(qǐng)求
HTTP請(qǐng)求的格式如下所示:
<headers>
<blank line>
[<request-body>]
在HTTP請(qǐng)求中,第一行必須是一個(gè)請(qǐng)求行(request line),用來說明請(qǐng)求類型、要訪問的資源以及使用的HTTP版本。緊接著是一個(gè)首部(header)小節(jié),用來說明服務(wù)器要使用的附加信息。在首部之后是一個(gè)空行,再此之后可以添加任意的其他數(shù)據(jù)[稱之為主體(body)]。
在HTTP中,定義了大量的請(qǐng)求類型,不過Ajax開發(fā)人員關(guān)心的只有GET請(qǐng)求和POST請(qǐng)求。只要在Web瀏覽器上輸入一個(gè)URL,瀏覽器就將基于該URL向服務(wù)器發(fā)送一個(gè)GET請(qǐng)求,以告訴服務(wù)器獲取并返回什么資源。對(duì)于www.wrox.com的GET請(qǐng)求如下所示:
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
請(qǐng)求行的第一部分說明了該請(qǐng)求是GET請(qǐng)求。該行的第二部分是一個(gè)斜杠(/),用來說明請(qǐng)求的是該域名的根目錄。該行的最后一部分說明使用的是HTTP 1.1版本(另一個(gè)可選項(xiàng)是1.0)。那么請(qǐng)求發(fā)到哪里去呢?這就是第二行的內(nèi)容。
第2行是請(qǐng)求的第一個(gè)首部,HOST。首部HOST將指出請(qǐng)求的目的地。結(jié)合HOST和上一行中的斜杠(/),可以通知服務(wù)器請(qǐng)求的是www.wrox.com/(HTTP 1.1才需要使用首部HOST,而原來的1.0版本則不需要使用)。第三行中包含的是首部User-Agent,服務(wù)器端和客戶端腳本都能夠訪問它,它是瀏覽器類型檢測(cè)邏輯的重要基礎(chǔ)。該信息由你使用的瀏覽器來定義(在本例中是Firefox 1.0.1),并且在每個(gè)請(qǐng)求中將自動(dòng)發(fā)送。最后一行是首部Connection,通常將瀏覽器操作設(shè)置為Keep-Alive(當(dāng)然也可以設(shè)置為其他值,但這已經(jīng)超出了本書討論的范圍)。注意,在最后一個(gè)首部之后有一個(gè)空行。即使不存在請(qǐng)求主體,這個(gè)空行也是必需的。
如果要獲取一個(gè)諸如http://www.wrox.com/books的www.wrox.com域內(nèi)的頁面,那么該請(qǐng)求可能類似于:
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
注意只有第一行的內(nèi)容發(fā)生了變化,它只包含URL中www.wrox.com后面的部分。
要發(fā)送GET請(qǐng)求的參數(shù),則必須將這些額外的信息附在URL本身的后面。其格式類似于:
該信息稱之為查詢字符串(query string),它將會(huì)復(fù)制在HTTP請(qǐng)求的請(qǐng)求行中,如下所示:
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
注意,為了將文本“Professional Ajax”作為URL的參數(shù),需要編碼處理其內(nèi)容,將空格替換成%20,這稱為URL編碼(URL encoding),常用于HTTP的許多地方(JavaScript提供了內(nèi)建的函數(shù)來處理URL編碼和解碼,這些將在本章中的后續(xù)部分中說明)。“名稱—值”(name—value)對(duì)用 & 隔開。絕大部分的服務(wù)器端技術(shù)能夠自動(dòng)對(duì)請(qǐng)求主體進(jìn)行解碼,并為這些值的訪問提供一些邏輯方式。當(dāng)然,如何使用這些數(shù)據(jù)還是由服務(wù)器決定的。
瀏覽器發(fā)送的首部,通常比本文中所討論的要多得多。為了簡(jiǎn)單起見,這里的例子盡可能簡(jiǎn)短。
另一方面,POST請(qǐng)求在請(qǐng)求主體中為服務(wù)器提供了一些附加的信息。通常,當(dāng)填寫一個(gè)在線表單并提交它時(shí),這些填入的數(shù)據(jù)將以POST請(qǐng)求的方式發(fā)送給服務(wù)器。
以下就是一個(gè)典型的POST請(qǐng)求:
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
從上面可以發(fā)現(xiàn), POST請(qǐng)求和GET請(qǐng)求之間有一些區(qū)別。首先,請(qǐng)求行開始處的GET改為了POST,以表示不同的請(qǐng)求類型。你會(huì)發(fā)現(xiàn)首部Host和User-Agent仍然存在,在后面有兩個(gè)新行。其中首部Content-Type說明了請(qǐng)求主體的內(nèi)容是如何編碼的。瀏覽器始終以application/ x-www-form- urlencoded的格式編碼來傳送數(shù)據(jù),這是針對(duì)簡(jiǎn)單URL編碼的MIME類型。首部Content-Length說明了請(qǐng)求主體的字節(jié)數(shù)。在首部Connection后是一個(gè)空行,再后面就是請(qǐng)求主體。與大多數(shù)瀏覽器的POST請(qǐng)求一樣,這是以簡(jiǎn)單的“名稱—值”對(duì)的形式給出的,其中name是Professional Ajax,publisher是Wiley。你可以以同樣的格式來組織URL的查詢字符串參數(shù)。
正如前面所提到的,還有其他的HTTP請(qǐng)求類型,它們遵從的基本格式與GET請(qǐng)求和POST請(qǐng)求相同。下一步我們來看看服務(wù)器將對(duì)HTTP請(qǐng)求發(fā)送什么響應(yīng)。
HTTP響應(yīng)
如下所示,HTTP響應(yīng)的格式與請(qǐng)求的格式十分類似:
<headers>
<blank line>
[<response-body>]
正如你所見,在響應(yīng)中唯一真正的區(qū)別在于第一行中用狀態(tài)信息代替了請(qǐng)求信息。狀態(tài)行(status line)通過提供一個(gè)狀態(tài)碼來說明所請(qǐng)求的資源情況。以下就是一個(gè)HTTP響應(yīng)的例子:
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>W(wǎng)rox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
在本例中,狀態(tài)行給出的HTTP狀態(tài)代碼是200,以及消息OK。狀態(tài)行始終包含的是狀態(tài)碼和相應(yīng)的簡(jiǎn)短消息,以避免混亂。最常用的狀態(tài)碼有:
◆200 (OK): 找到了該資源,并且一切正常。
◆304 (NOT MODIFIED): 該資源在上次請(qǐng)求之后沒有任何修改。這通常用于瀏覽器的緩存機(jī)制。
◆ 401 (UNAUTHORIZED): 客戶端無權(quán)訪問該資源。這通常會(huì)使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到服務(wù)器。
◆403 (FORBIDDEN): 客戶端未能獲得授權(quán)。這通常是在401之后輸入了不正確的用戶名或密碼。
◆404 (NOT FOUND): 在指定的位置不存在所申請(qǐng)的資源。
在狀態(tài)行之后是一些首部。通常,服務(wù)器會(huì)返回一個(gè)名為Data的首部,用來說明響應(yīng)生成的日期和時(shí)間(服務(wù)器通常還會(huì)返回一些關(guān)于其自身的信息,盡管并非是必需的)。接下來的兩個(gè)首部大家應(yīng)該熟悉,就是與POST請(qǐng)求中一樣的Content-Type和Content-Length。在本例中,首部Content-Type指定了MIME類型HTML(text/html),其編碼類型是ISO-8859-1(這是針對(duì)美國(guó)英語資源的編碼標(biāo)準(zhǔn))。響應(yīng)主體所包含的就是所請(qǐng)求資源的HTML源文件(盡管還可能包含純文本或其他資源類型的二進(jìn)制數(shù)據(jù))。瀏覽器將把這些數(shù)據(jù)顯示給用戶。
注意,這里并沒有指明針對(duì)該響應(yīng)的請(qǐng)求類型,不過這對(duì)于服務(wù)器并不重要�?蛻舳酥烂糠N類型的請(qǐng)求將返回什么類型的數(shù)據(jù),并決定如何使用這些數(shù)據(jù)。
分享:淺析AJAX初體驗(yàn)之上手篇HotHeart的BLog: www.xujiwei.cn/blog AJAX初體驗(yàn)之上手篇 AJAX是這兩年蠻熱的東西,我也湊湊熱鬧,前些天去找了些教程學(xué)學(xué),下面就按整個(gè)處理過程把自己學(xué)的東西寫寫,不過,因?yàn)槭浅鯇W(xué),所以有錯(cuò)誤就請(qǐng)見諒啦,歡迎指正^_^。 1.創(chuàng)建 XMLHttpRequest 對(duì)象
- Ajax中瀏覽器的緩存問題解決方法
- AJAX和WebService實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)具體代碼
- ajax 登錄功能簡(jiǎn)單實(shí)現(xiàn)(未連接數(shù)據(jù)庫(kù))
- AJAX和WebService實(shí)現(xiàn)郵箱驗(yàn)證(無刷新驗(yàn)證郵件地址是否合法)
- AJAX和三層架構(gòu)實(shí)現(xiàn)分頁功能具體思路及代碼
- 使用AJAX返回WebService里的集合具體實(shí)現(xiàn)
- AJAX獲取服務(wù)器當(dāng)前時(shí)間及時(shí)間格式輸出處理
- ajax傳遞多個(gè)參數(shù)具體實(shí)現(xiàn)
- ajax傳遞一個(gè)參數(shù)具體實(shí)現(xiàn)
- 滑輪滾動(dòng)到頁面底部ajax加載數(shù)據(jù)配合jsonp實(shí)現(xiàn)探討
- jQery ajax——load()方法示例介紹
- jQuery+Ajax實(shí)現(xiàn)表格數(shù)據(jù)不同列標(biāo)題排序(為表格注入活力)
AJAX教程Rss訂閱編程教程搜索
AJAX教程推薦
- ajax中文亂碼問題解決方案
- xmlHttpRequest實(shí)踐之無刷新驗(yàn)證用戶名
- 怎樣學(xué)習(xí)AJAX
- Ajax開發(fā)十個(gè)常犯的錯(cuò)誤
- ajax傳遞一個(gè)參數(shù)具體實(shí)現(xiàn)
- AJAX與數(shù)據(jù)島實(shí)現(xiàn)無刷新綁定
- 理解才能創(chuàng)新 輕松打造自己的AJAX框架
- 如何用AjaxPro實(shí)現(xiàn)定時(shí)刷新效果
- AJAX實(shí)例 自動(dòng)保存草稿
- AJAX 請(qǐng)求區(qū)分 $_SERVER[''HTTP_X_REQUESTED_WITH''] 小解
- 相關(guān)鏈接:
- 教程說明:
AJAX教程-AJAX快速入門之HTTP協(xié)議基礎(chǔ)
。