如何理解HTTP協議中的無狀態和無連接


HTTP協議又稱為超文本傳輸協議;是OSI模型中第七層應用層中的協議,具體具有以下特點:

1、支持客戶/服務器模式

2、簡單快速

3、靈活

4、無連接

5、無狀態

這里我們主要解釋無連接和無狀態的特點:

無連接:

  是指每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶端的應答后便斷開連接;這種方式有利於節省傳輸時間。

早期這么做的原因是HTT協議產生於互聯網,因此服務器需要同時處理面向全世界數十萬、百萬的客戶端請求的網頁訪問,但每個客戶端(即瀏覽器)與服務器之間交換數據的間歇性較大(即傳輸具備突發性、瞬時性),並且網頁瀏覽的聯想性、發散性導致兩次傳送的數據關聯性低,大部分通道實際上會很空閑,無端占用資源。因此HTTP的設計者有意利用這個特點將協議設計為請求時建立連接、請求完釋放連接,以盡快將資源釋放出來服務其他客戶端。

隨着時間的推移,網頁變得越來越復雜,里面可能嵌入了很多圖片,這時候每次訪問圖片都需要建立一次TCP連接就顯得很低效。后來keep-alive被提出來解決低效率的問題。

keep-alive 功能使客戶端到服務器端的連接持續有效,當出現對服務器的后繼請求時,keep-alive 功能避免了建立或者重新建立連接。市場上大部分web服務器包括iPlanet、IIS、Apache都支持keep-alive。對於提供靜態內容的網站來說,這個功能通常很有用。但是,對於負擔比較重的網站來說,這里存在另外一個服務器:雖然為客戶保留打開的連接有一定的好處,但是同時它影響了性能,因為在處理暫停期間,本來可以釋放的資源仍然被占用。當web服務器和應用服務器在同一台機器上運行時,keep-alive功能對資源的利用影響尤其突出。

這樣一來,客戶端和服務端之間的HTTP連接就會保持,不會斷開(超過keep-alive時間,以外斷電情況下會斷開),當客戶端發送另外一個請求時,就是用這條已經建立的連接。

無狀態:

  無狀態是指協議對事物處理沒有記憶能力,服務器不知道客戶端是什么態。即我們給服務器發送HTTP請求之后,服務器根據請求會給我們發送數據過來,但是發送完,不會記錄任何信息。

HTTP是一個無狀態的協議,這意味着每個請求都是獨立的,keep-alive並不能改變這個結果。

缺少狀態,意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量大增。另一方面,在服務器不需要先前信息時它的應答就比較快。

HTTP這種特性有優點也有缺點,優點:在於解放了服務器,每一次請求“點到為止”不會造成不必要連接的占用,缺點在於每次請求會傳輸大量重復的內容信息。

客戶端與服務端進行動態交互的web應用程序出現之后,HTTP無狀態的特性嚴重阻礙了這些應用程序的實現,畢竟交互是需要承前啟后的,簡單的購物車程序也要知道用戶到底在之前選擇了什么商品。於是,兩種用於保持HTTP連接狀態的技術應運而生,一個是cookie 一個是session

 

cookie可以保持登陸信息到用戶下次與服務器的會話,換句話說,下次訪問同一網站時,用戶會發現不必輸入用戶名和密碼就已經登陸了(當然不排除手動刪除cookie),而還有些cookie在用戶退出會話的時候就被刪除了,這樣可以有效的保護個人隱私

cookie是存儲在客戶端的

cookies 最典型的應用是判斷注冊用戶是否已經登陸網站。

 

與cookie相對的一個解決方案是session,他是通過服務端來保持狀態的。存儲在服務端。

當客戶端訪問服務器時,服務器根據需求設置session,將會話信息保存在服務器上,同時將提示session的SessionID 傳送給客戶端瀏覽器,瀏覽器將這個sessionID保存在內存中,我們稱之為無過期時間的cookie。瀏覽器關閉后,這個cookie就會被清理掉,它不會存在於用戶的cookie臨時文件。

 

以后瀏覽器每次請求都會額外加上這個參數值,服務器會根據這個SessionID,就能獲取客戶端的數據信息。

如果客戶端瀏覽器意外關閉,服務器保存的session數據不是立即釋放,此時數據還會存在,只要我們知道那個sessionID,就可以繼續通過請求獲得此session的信息,因為此時后台的session還存在,當然我們可以設置一個session超時時間,一旦超過規定時間沒有客戶端請求時,服務器就會清除對應的sessionID的session信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM