[ASP.NET]Stateful與Stateless

[ASP.NET]Stateful與Stateless
HTTP是Stateless(無狀態)這句話相信大家都聽過,而無狀態的意思就代表著Client與Server兩端不會記得先前的狀態,我們先看看這邊對無狀態的定義:1.11.1.1 The HTTP Protocol is Stateless

HTTP是Stateless(無狀態)這句話相信大家都聽過,而無狀態的意思就代表著Client與Server兩端不會記得先前的狀態,我們先看看這邊對無狀態的定義:1.11.1.1 The HTTP Protocol is Stateless
image 

Stateless
1.不會記住(retain)之前的連線
2.每個request都被視為是唯一且獨立的

我們簡單來說,以一般的網頁機制來說,我們是對Server提出一個URL請求,然後由Server返回一份html文件,如下所示:
image

在Server端並沒有特別去紀錄Client端上一個送出的request內容,舉例來說,我在Yahoo首頁點下新聞,進入Yahoo新聞的頁面,跟我直接在網址列中打上
http://tw.news.yahoo.com/取得的結果是一樣的,我想要看Yahoo新聞不見得要經過進入Yahoo首頁(http://tw.yahoo.com/)的動作,也就是說我可不可以看Yahoo新聞只跟我有沒有連到http://tw.news.yahoo.com/這個網址有關,而與我前面的步驟無關,這種情況,我們稱之為Stateless。
image 

但網頁有沒有可能是Stateful(有狀態)呢?當然是有可能的,某些網頁會限制我們要先進行某些動作A後才能進入另一個畫面B,你沒有作過A想要直接request B畫面是不可行的,要達成Stateful的做法很多種,我們常見的Session就是其中一種,以博客來網路書店為例,如果我沒有登入,要直接看購物車的內容,就什麼都看不到:
image 

登入後可以正常顯示,這就意味著Server端有『記住』我沒有登入過這件事:
image

相同的狀況我們可以在購物結帳的過程中看到,我沒有確認過購物明細的話,我是無法直接進入選擇付款方式的,就算我知道選擇付款方式的URL也是一樣,因為Server端就會記得你還沒有確認過購物明細這件事,而這種時候,我們就稱之為Stateful了。
image

參考資料:

Programming in Stateless Environments
"Web Apps Suck Because HTTP is Stateless..."
1.11.1.1 The HTTP Protocol is Stateless

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。