出處:
要很好地領會ajax技術的關鍵是了解超文字傳輸協議(http),該協議用來傳輸網頁、影象以及網際網路上在瀏覽器與伺服器間傳輸的其他型別檔案。只要你在瀏覽器上輸入乙個url,最前面的http://就表示使用http來訪問指定位置的資訊。(大部分瀏覽器還支援其他一些不同的協議,其中ftp就是乙個典型例子。)
注意:本文中只涉及http協議,這是ajax開發人員關心的方面,它可作為http的參考手冊或指南。
http由兩部分組成:請求和響應。當你在web瀏覽器中輸入乙個url時,瀏覽器將根據你的要求建立並傳送請求,該請求包含所輸入的url以及一些與瀏覽器本身相關的資訊。當伺服器收到這個請求時將返回乙個響應,該響應包括與該請求相關的資訊以及位於指定url(如果有的話)的資料。直到瀏覽器解析該響應並顯示出網頁(或其他資源)為止。
http請求
http請求的格式如下所示:
<request-line>
<headers>
<blank line>
[<request-body>]
在http請求中,第一行必須是乙個請求行(request line),用來說明請求型別、要訪問的資源以及使用的http版本。緊接著是乙個首部(header)小節,用來說明伺服器要使用的附加資訊。在首部之後是乙個空行,再此之後可以新增任意的其他資料[稱之為主體(body)]。
在http中,定義了大量的請求型別,不過ajax開發人員關心的只有get請求和post請求。只要在web瀏覽器上輸入乙個url,瀏覽器就將基於該url向伺服器傳送乙個get請求,以告訴伺服器獲取並返回什麼資源。對於www.wrox.com的get請求如下所示:
請求行的第一部分說明了該請求是get請求。該行的第二部分是乙個斜槓(/),用來說明請求的是該網域名稱的根目錄。該行的最後一部分說明使用的是http 1.1版本(另乙個可選項是1.0)。那麼請求發到**去呢?這就是第二行的內容。
第2行是請求的第乙個首部,host。首部host將指出請求的目的地。結合host和上一行中的斜槓(/),可以通知伺服器請求的是www.wrox.com/(http 1.1才需要使用首部host,而原來的1.0版本則不需要使用)。第三行中包含的是首部user-agent,伺服器端和客戶端指令碼都能夠訪問它,它是瀏覽器型別檢測邏輯的重要基礎。該資訊由你使用的瀏覽器來定義(在本例中是firefox 1.0.1),並且在每個請求中將自動傳送。最後一行是首部connection,通常將瀏覽器操作設定為keep-alive(當然也可以設定為其他值,但這已經超出了本書討論的範圍)。注意,在最後乙個首部之後有乙個空行。即使不存在請求主體,這個空行也是必需的。
如果要獲取乙個諸如的www.wrox.com域內的頁面,那麼該請求可能類似於:
注意只有第一行的內容發生了變化,它只包含url中www.wrox.com後面的部分。
要傳送get請求的引數,則必須將這些額外的資訊附在url本身的後面。其格式類似於:
url ? name1=value1&name2=value2&..&namen=valuen
該資訊稱之為查詢字串(query string),它將會複製在http請求的請求行中,如下所示:
注意,為了將文字「professional ajax」作為url的引數,需要編碼處理其內容,將空格替換成%20,這稱為url編碼(url encoding),常用於http的許多地方(j**ascript提供了內建的函式來處理url編碼和解碼,這些將在本章中的後續部分中說明)。「名稱—值」(name—value)對用 & 隔開。絕大部分的伺服器端技術能夠自動對請求主體進行解碼,並為這些值的訪問提供一些邏輯方式。當然,如何使用這些資料還是由伺服器決定的。
瀏覽器傳送的首部,通常比本文中所討論的要多得多。為了簡單起見,這裡的例子盡可能簡短。
如下所示,http響應的格式與請求的格式十分類似:
<status-line>
<headers>
<blank line>
[<response-body>]
正如你所見,在響應中唯一真正的區別在於第一行中用狀態資訊代替了請求資訊。狀態行(status line)通過提供乙個狀態碼來說明所請求的資源情況。以下就是乙個http響應的例子:
在本例中,狀態行給出的http狀態**是200,以及訊息ok。狀態行始終包含的是狀態碼和相應的簡短訊息,以避免混亂。最常用的狀態碼有:
◆200 (ok): 找到了該資源,並且一切正常。
◆304 (not modified): 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的快取機制。
◆ 401 (unauthorized):客戶端無權訪問該資源。這通常會使得瀏覽器要求使用者輸入使用者名稱和密碼,以登入到伺服器。
◆403 (forbidden):客戶端未能獲得授權。這通常是在401之後輸入了不正確的使用者名稱或密碼。
◆404 (not found):在指定的位置不存在所申請的資源。
在狀態行之後是一些首部。通常,伺服器會返回乙個名為data的首部,用來說明響應生成的日期和時間(伺服器通常還會返回一些關於其自身的資訊,儘管並非是必需的)。接下來的兩個首部大家應該熟悉,就是與post請求中一樣的content-type和content-length。在本例中,首部content-type指定了mime型別html(text/html),其編碼型別是iso-8859-1(這是針對美國英語資源的編碼標準)。響應主體所包含的就是所請求資源的html原始檔(儘管還可能包含純文字或其他資源型別的二進位制資料)。瀏覽器將把這些資料顯示給使用者。
注意,這裡並沒有指明針對該響應的請求型別,不過這對於伺服器並不重要。客戶端知道每種型別的請求將返回什麼型別的資料,並決定如何使用這些資料。
ajax流程解析
ajax總的流程分為 1.建立xmlhttprequest物件 1.1建立xmlhttprequest語法 1.2老版本的internet explorer ie5和ie6 使用activex物件xmlhttp 2.與伺服器建立連線 2.1get請求 get是請求方式請求,demoservlet是u...
AJAX 跨域解析
同源策略規定,ajax 請求 xmlhttprequest比如這個 協議是http,網域名稱是www.example.com,埠是預設的80。如果你在這個 上使用 ajax 傳送請求,就會出錯,因為網域名稱不同。ajax 跨域的根本原因是瀏覽器不允許這麼做 不是服務端的問題 瀏覽器限制 ajax 跨...
原生ajax解析 封裝原生ajax函式
前沿 對於此篇隨筆,完是簡要寫了幾個重要的地方,具體實現細節完在提供的原始碼做了筆記 一 ajax基本要點介紹 更好的介紹ajax 1.ajax物件中new xmlhttprequest 屬性和方法列表 2.常用事件介紹 事件觸發時機 onreadystatechange 當readystate的值...