![]()
HTTP協(xié)議用于客戶端和服務器端之間的通信HTTP協(xié)議和TCP/IP協(xié)議族內(nèi)的其他眾多的協(xié)議相同,用于客戶端和服務器之間的通信。請求訪問文本或圖像等資源的一端稱為客戶端,而提供資源響應的一端稱為服務器端。 在兩臺計算機之間使用HTTP協(xié)議通信時,在一條通信線路上必定有一端是客戶端,另一端則是服務器端。有時候,按實際情況,兩臺計算機作為客戶端和服務器端的角色有可能會互換。但就僅從一條通信路線來說,服務器端和客戶端的角色是確定的,而用HTTP協(xié)議能夠明確區(qū)分哪端是客戶端,哪端是服務器端。 通過請求和響應的交換達成通信 HTTP協(xié)議規(guī)定,請求從客戶端發(fā)出,最后服務器端響應該請求并返回。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有接收到請求之前不會發(fā)送響應。 下面則是從客戶端發(fā)送給某個HTTP服務器端的請求報文中的內(nèi)容。 起始行開頭的GET表示請求訪問服務器的類型,稱為方法(method)。隨后的字符串/index.htm指明了請求訪問的資源對象,也叫做請求URI(request-URI)。最后的HTTP/1.1,即HTTP的版本號,用來提示客戶端使用的HTTP協(xié)議功能。綜合來看,這段請求內(nèi)容的意思是:請求訪問某臺HTTP服務器上的/index.htm頁面資源。請求報文是由請求方法、請求URI、協(xié)議版本、可選的請求首部字段和內(nèi)容實體構(gòu)成的。 請求首部字段及內(nèi)容實體稍后會作詳細說明。接下來,我們繼續(xù)講解。接收到請求的服務器,會將請求內(nèi)容的處理結(jié)果以響應的形式返回。 在起始行開頭的HTTP/1.1表示服務器對應的HTTP版本。緊挨著的200 OK表示請求的處理結(jié)果的狀態(tài)碼(status code)和原因短語(reason-phrase)。下一行顯示了創(chuàng)建響應的日期時間,是首部字段(headerfield)內(nèi)的一個屬性。接著以一空行分隔,之后的內(nèi)容稱為資源實體的主體(entity body)。響應報文基本上由協(xié)議版本、狀態(tài)碼(表示請求成功或失敗的數(shù)字代碼)、用以解釋狀態(tài)碼的原因短語、可選的響應首部字段以及實體主體構(gòu)成。稍后我們會對這些內(nèi)容進行詳細說明。 HTTP是不保存狀態(tài)的協(xié)議 HTTP是一種不保存狀態(tài),即無狀態(tài)(stateless)協(xié)議。HTTP協(xié)議自身不對請求和響應之間的通信狀態(tài)進行保存。也就是說在HTTP這個級別,協(xié)議對于發(fā)送過的請求或響應都不做持久化處理。 使用HTTP協(xié)議,每當有新的請求發(fā)送時,就會有對應的新響應產(chǎn)生。協(xié)議本身并不保留之前一切的請求或響應報文的信息。這是為了更快地處理大量事務,確保協(xié)議的可伸縮性,而特意把HTTP協(xié)議設(shè)計成如此簡單的。 可是,隨著Web的不斷發(fā)展,因無狀態(tài)而導致業(yè)務處理變得棘手的情況增多了。比如,用戶登錄到一家購物網(wǎng)站,即使他跳轉(zhuǎn)到該站的其他頁面后,也需要能繼續(xù)保持登錄狀態(tài)。針對這個實例,網(wǎng)站為了能夠掌握是誰送出的請求,需要保存用戶的狀態(tài)。 HTTP/1.1雖然是無狀態(tài)協(xié)議,但為了實現(xiàn)期望的保持狀態(tài)功能,于是引入了Cookie技術(shù)。有了Cookie再用HTTP協(xié)議通信,就可以管理狀態(tài)了 |
|