HTTP會話那些事

本篇文章的目的是增進初學者或者有一定工作經驗的開發人員進一步的認識瞭解“會話”,去探究下爲什麼需要會話以及會話的作用,廢話不多說,開拔~

開篇思考這麼一個我們日常的行爲,大家每天都會通過網絡瞭解各種知識,比如我們去購物網站進行購物,去各種博客論壇去瀏覽、回覆各種感興趣的東西,這些行爲的本質就是對目標服務器上的資源發送了來自同一客戶端的多個請求,比如我們可以不用登陸,就可以把各種感興趣的商品放置到“購物車”裏面去,記住此時你感興趣放入的商品放到是你的購物車裏面,而不是別人的購物車裏面,這個“購物車”會幫你持有這些你放入的商品,論壇博客等也是類似,只要你單擊各種鏈接,就會向目標服務器發送請求,你會驚訝地發現有個看不見的“手”在幫助你記錄,像“購物車”這個例子,好像有個什麼手段來唯一標識你的購物車,維持專屬於你的各種放入的商品,說到這裏,你可能會問是不是通過IP地址作爲唯一標識符來記錄購物車的商品呢,當然不是啦,你想想在大學校園裏面,數以千計的大學生對外都在使用着相同的IP地址,他們真實的IP地址都隱藏在NAT路由之後,對了,到這裏你估計會懂了,原來“會話”就是幹這個事的,雖然仍然有些抽象;

上面說了有“會話”的樣子,那麼在談談如果沒有“會話”會怎麼辦,沒有“會話”意味着無法維持請求和請求之間的狀態,說白了對於服務器而言,無法識別明明是來自同一客戶端的多個請求到底是不是由同一個客戶端發出的,爲什麼會這樣呢?原因在於HTTP請求自身是完全無狀態的。從服務器的角度來說,當用戶通過瀏覽器打開第一個連接到服務器的套接字時請求開始到服務器返回最後一個數據包並關閉連接時,請求結束。一旦結束,用戶的瀏覽器和服務器不再有任何聯繫。即便後期再有從該瀏覽器發送到服務器端的請求,服務器都無法將新的請求與之前的請求關聯起來;同樣拿商城中舉例子,你在半個小時內,可能會查看20多個商品,並可能會將10個商品放入到你的購物車或者收藏起來,如果沒有“會話”,那麼你需要在每次添加購物車或者收藏時,都需要自己主動提供你的身份標識信息,諸如用戶名和密碼,用來說明這個XXX商品需要添加或者收藏到YYY用戶的名下,因爲服務器搞不清楚此時的請求跟彼時的請求是不是來自同一個瀏覽器,如此一來,用戶可能爲此而感到不快;

上面幾段分別描述了有“會話”和無“會話”的差別,那麼接下來在具體談談“會話”到底幫我們幹了什麼事!

1、維持狀態:當你在在線購物網站購物時,無論你是否賬號登陸,機制都差不多。當你瀏覽商品,發現一個喜歡的商品,把它添加到購物車裏面去繼續瀏覽,一會又發現了一件商品又添加進購物車。此時,你查看購物車,應該會看到剛剛添加進去的兩件商品。在你發出的兩個添加指定商品到購物車的請求中,在線購物網站通過某種方式瞭解到它們是來自於同一計算機中的同一瀏覽器,並將他們關聯到你的購物車。其他人是無法看到你的購物車或者購物車中包含的產品,你的購物車只綁定到你的計算機和瀏覽器;這個過程跟你去超市購物很相像,即進入超市後取到一個小推車或者籃子,期間在超市瀏覽各種商品,找到自己喜歡的放到自己的小推車或籃子中,購物完畢到收銀臺結賬,從小推車中取出你的商品付款。出超市時歸還小推車或籃子;在這兩個例子中購物車、小推車或籃子將始終維持着商品的狀態。如果沒有它們,你將無法保持希望購買的所有商品,那麼只能選一個商品,付款,然後離開,如果需要買20件商品,你將重複做20次購物活動。“會話”是在幕後維持請求之間狀態的引擎,你會發現如果沒有它,Web將會有極大的變化;

2、記住用戶:再來一個論壇的場景,幾乎所有的在線論壇,用戶都會有自己的用戶名。當用戶進入論壇時,需要提供用戶名和密碼作爲個人身份准入的驗證,這樣才能登陸成功。只有登陸成功後,身份纔能有“遊客”-> “用戶”,纔可以進行添加論壇主題、回覆主題、評論、關注、留言等,需要注意的是在整個一系列過程中,用戶只需要登陸一次。系統就通過“會話”機制記住了該用戶;

3、應用程序工作流:各種招聘網站提供的在線簡歷製作應該用過吧,你會發現從開始填寫到最終簡歷成型差不多需要點擊三四次“下一步”,在每個“下一步”的頁面中根據簡歷模板內容要求,如個人基礎信息->教育背景->掌握的技術簡介->項目經驗-> 個人簡介 等,這五個步驟可以看作是一個簡單的工作流,工作流包含了許多步驟,每個步驟的結束都表示單個任務的完成,將所有的步驟結合在一起,就組成了整個工作流,因此在請求之間必須維持一個狀態。當然這個例子只是工作流概念的一小部分。

本篇先從一個日常行爲引導大家瞭解什麼是“會話”,然後分析了沒有“會話”的場景,最後介紹了“會話”的幾種應用場景,希望能給大家點啓示!

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