會(huì)話管理
在http協(xié)議中,我們了解到了,http每次請(qǐng)求都是握手/揮手,第二次和第一次請(qǐng)求時(shí)沒(méi)有任何關(guān)聯(lián)的,屬于無(wú)狀態(tài)協(xié)議,那么問(wèn)題來(lái)了,既然http是無(wú)狀態(tài)協(xié)議,那服務(wù)器是怎么區(qū)分不同的用戶的呢?,這就是會(huì)話了
基礎(chǔ)講解
服務(wù)器能區(qū)分用戶的原理主要就是在于會(huì)話,每次發(fā)起http請(qǐng)求時(shí),都附加上一條身份識(shí)別數(shù)據(jù),例如下面這個(gè)http請(qǐng)求頭:
GET / HTTP/1.1
Host: m.edpy57.cn
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: Hm_lvt_4c8d895ff3b25bddb6fa4185c8651cc3=1541986142,1542074627,1542158990,1542252497; Hm_lpvt_4c8d895ff3b25bddb6fa4185c8651cc3=1542252498
拋開(kāi)http本身需要的數(shù)據(jù),我們講解下:
User-Agent: 用戶端信息,瀏覽器的各種信息
Cookie: cookie會(huì)話
服務(wù)端可以通過(guò)User-Agent獲得用戶的瀏覽器信息,可以通過(guò)cookie獲取自定義的信息
所以我們可以:
- 用戶A第一次進(jìn)入,沒(méi)有附帶cookie
- 服務(wù)端記錄這個(gè)用戶,響應(yīng)頭增加一個(gè)set_cookie:id=1的cookie
- 瀏覽器獲得響應(yīng)頭,解析到set_cookie動(dòng)作,把id=1存進(jìn)cookie
- 第二次請(qǐng)求服務(wù)端,帶上id=1的cookie,服務(wù)端就可以知道:這次請(qǐng)求時(shí)用戶A請(qǐng)求的
- 同理,用戶B第一次進(jìn)入,服務(wù)端響應(yīng)set_cookie:id=2
- ...
可以看出,只要用戶端每次請(qǐng)求,跟服務(wù)端約定好一個(gè)參數(shù)作為用戶標(biāo)識(shí),服務(wù)端就可以通過(guò)這個(gè)標(biāo)識(shí)區(qū)分不同的用戶了