1. 程式人生 > >HTTP協議無狀態,到底要怎麼理解?【前端】

HTTP協議無狀態,到底要怎麼理解?【前端】

一,故事

一天,你有個需求,你要去超市買一瓶醬油。

到了超市買了醬油,你告訴售貨員,下次給我準備下麵粉,我下次來拿。

第二次,你去超市拿麵粉,售貨員說他不記得你什麼時候說要準備麵粉。

這次你學聰明瞭,售貨員給你寫了個紙條,上面有超市的章印,下次你帶著紙條來,買上了超市給你準備的麵粉

二,無狀態協議

1,http超文字傳輸協議:Hyper Text Transfer Protocol

2,http不會為了下次連線所需要的資訊而維護這次連線

3,就像你去超市買醬油,買完就結束了,它不會記錄你告訴他的資訊,不會記錄你下次還要買麵粉,下次他也不知道你曾經來過

4,顧名思義無狀態是指,當瀏覽器傳送請求給server的時候,server響應,可是同一個瀏覽器再發送請求給server的時候,他會響應,可是他不知道你就是剛才那個瀏覽器,簡單地說,就是server不會去記得你,所以是無狀態協議。而DNS是有狀態協議 。

5,再舉個例子,像購物車,你買東西加入購物車,如果http協議的話,重新整理頁面,購物車就為空了。

三,cookie和session

1,在這樣的client與server進行動態互動的Web應用程式出現之後,HTTP無狀態的特性嚴重阻礙了這些應用程式的實現,畢竟互動是須要承前啟後的,簡單的購物車程式也要知道使用者究竟在之前選擇了什麼商品。於是,兩種用於保持HTTP連線狀態的技術就應運而生了,一個是Cookie,而還有一個則是Session。

2,Cookie是通過client保持狀態的解決方式。從定義上來說,Cookie就是由server發給client的特殊資訊,而這些資訊以文字檔案的方式存放在client,然後client每次向server傳送請求的時候都會帶上這些特殊的資訊。讓我們說得更詳細一些:當用戶使用瀏覽器訪問一個支援Cookie的站點的時候,使用者會提供包含username在內的個人資訊而且提交至server;接著,server在向client回傳對應的超文字的同一時候也會發回這些個人資訊,當然這些資訊並非存放在HTTP響應體(Response Body)中的,而是存放於HTTP響應頭(Response Header);

簡單來說,cookie儲存在客戶端,類似你去超市,售貨員給你一個紙條,你拿著紙條走了,下次來帶著紙條來

3, 與Cookie相對的一個解決方式是Session,它是通過server來保持狀態的。因為Session這個詞彙包括的語義非常多,因此須要在這裡明白一下Session的含義。首先,我們通常都會把Session翻譯成會話,因此我們能夠把client瀏覽器與server之間一系列互動的動作稱為一個Session。從這個語義出發,我們會提到Session持續的時間,會提到在Session過程中進行了什麼操作等等;其次,Session指的是server端為client所開闢的儲存空間,在當中儲存的資訊就是用於保持狀態。從這個語義出發,我們則會提到往Session中存放什麼內容,怎樣依據鍵值從Session中獲取匹配的內容等。

簡單來說,session儲存在服務端,類似你去超市,售貨員在自己紙條上記錄張三下次買什麼,下次你來告訴他你叫張