http的無狀態無連接到底是什麼含義

無連接:服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。
早期這麼做的原因是HTTP協議產生於互聯網,因此服務器需要處理同時面向全世界數十萬、上百萬客戶端的網頁訪問,但每個客戶端(即瀏覽器)與服務器之間交換數據的間歇性較大(即傳輸具有突發性、瞬時性),並且網頁瀏覽的聯想性、發散性導致兩次傳送的數據關聯性很低,如果按照上面的方式則需要在服務器端開的進程和句柄數目都是不可接受的,象paranoid945所說的,大部分通道實際上會很空閒、無端佔用資源。因此HTTP的設計者有意利用這種特點將協議設計爲請求時建連接、請求完釋放連接,以儘快將資源釋放出來服務其他客戶端。

隨着時間的推移,html頁面變得複雜了,裏面可能嵌入了很多圖片,這時候每次訪問圖片都需要建立一次tcp連接就顯得低效了。因此Keep-Alive被提出用來解決效率低的問題。

這樣一來,客戶端和服務器之間的HTTP連接就會被保持,不會斷開(超過Keep-Alive規定的時間,意外斷電等情況除外),當客戶端發送另外一個請求時,就使用這條已經建立的連接。


無狀態:是指服務器不知道客戶端是什麼狀態。

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

然而,隨着時間的推移,人們發現靜態的HTML着實無聊而乏味,增加動態生成的內容纔會令Web應用程序變得更加有用。於是乎,HTML的語法在不斷膨脹,其中最重要的是增加了表單(Form);客戶端也增加了諸如腳本處理、DOM處理等功能;對於服務器,則相應的出現了CGI(Common Gateway Interface)以處理包含表單提交在內的動態請求。

在這種客戶端與服務器進行動態交互的Web應用程序出現之後,HTTP無狀態的特性嚴重阻礙了這些交互式應用程序的實現,畢竟交互是需要承前啓後的,簡單的購物車程序也要知道用戶到底在之前選擇了什麼商品。於是,兩種用於保持HTTP狀態的技術就應運而生了,一個是Cookie,而另一個則是Session。

 下面是關於cookie和session的一篇文章,少年已經總結的相當好了,直接拿來~

http://www.blogjava.net/cheneyfree/archive/2007/05/26/120168.html
Cookie是客戶端的存儲空間,由瀏覽器來維持。具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案。同時我們也看到,由於在服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇,比如說重寫URL和隱藏表單域。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章