為什么說http協議是無狀態協議


摘錄自博客 http://blog.sina.com.cn/s/blog_93b45b0f0101a4ix.html

無狀態含義:

  無狀態是指協議對於事務處理沒有記憶功能。缺少狀態意味着,假如后面的處理需要前面的信息,則前面的信息必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要前面信息時,應答就較快。直觀地說,就是每個請求都是獨立的,與前面的請求和后面的請求都是沒有直接聯系的。

實際中的使用情況:

  在web應用中,我們使用http協議,但是我們需要的web是有狀態的,因此加入了cookie、session等機制實現有狀態的的web。

  web=http協議+狀態機制+其他機制

為什么不改進http協議使之有狀態:

  最初的http協議只是用來瀏覽靜態文件的,無狀態協議已經足夠,這樣實現的負擔也很輕(相對來說,實現有狀態的代價是很高的,要維護狀態,根據狀態來操作。)。隨着web的發展,它需要變得有狀態,但是不是就要修改http協議使之有狀態呢?是不需要的。因為我們經常長時間逗留在某一個網頁,然后才進入到另一個網頁,如果在這兩個頁面之間維持狀態,代價是很高的。其次,歷史讓http無狀態,但是現在對http提出了新的要求,按照軟件領域的通常做法是,保留歷史經驗,在http協議上再加上一層實現我們的目的(“再加上一層,你可以做任何事”)。所以引入了其他機制來實現這種有狀態的連接。

哪些方法可以實現有狀態連接:

cookies, session, application

有人將web應用中有無狀態的情況,比着顧客逛商店的情景。

顧客:瀏覽器訪問方;

商店:web服務器;

一次購買:一次http訪問

我們知道,上一次顧客購買,並不代表顧客下一個小時一定會買(當然也不能代表不會)。也就是說同一個顧客的不同購買之間的關系是不定的。所以說實在的,這種情況下,讓商店保存所有的顧客購買的信息,等到下一次購買可以知道這個顧客以前購買的內容代價非常大的。所以商店為了避免這個代價,索性就認為每次的購買都是一次獨立的新的購買。淺台詞:商店不區分對待老顧客和新過客。這就是無狀態的。

但是,商店為了提高收益。她是想鼓勵顧客購買的。所以告訴你,只要你在一個月內購買了5瓶以上的啤酒,就送你一個酒杯。

我們看看這種情況我們怎么去實現呢?

A,給顧客發放一個磁卡,里面放有顧客過去的購買信息。

這樣商店就可以知道了。這就是cookie.

B,給顧客發放一個唯一號碼,號碼制定的顧客的消費信息,存儲在商店的服務器中。這就是session

最后,商店可以全局的決定,是5瓶為送酒杯還是6瓶。這就是application

其實,這些機制都是在無狀態的傳統購買過程中加入了一點東西,使整個過程變得有狀態。Web應用就是這樣的。

 


免責聲明!

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



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