摘錄自博客 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應用就是這樣的。