WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專(zhuān)題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢(qián)
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專(zhuān)題
- 云計(jì)算
- 微博營(yíng)銷(xiāo)
- 虛擬主機(jī)管理系統(tǒng)
- 開(kāi)放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
HTTP無(wú)狀態(tài)協(xié)議
HTTP無(wú)狀態(tài)協(xié)議,HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。
簡(jiǎn)介[ ]
無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。 客戶(hù)端與服務(wù)器進(jìn)行動(dòng)態(tài)交互的Web應(yīng)用程序出現(xiàn)之后,HTTP無(wú)狀態(tài)的特性嚴(yán)重阻礙了這些應(yīng)用程序的實(shí)現(xiàn),畢竟交互是需要承前啟后的,簡(jiǎn)單的購(gòu)物車(chē)程序也要知道用戶(hù)到底在之前選擇了什么商品。于是,兩種用于保持HTTP連接狀態(tài)的技術(shù)就應(yīng)運(yùn)而生了,一個(gè)是Cookie,而另一個(gè)則是Session。HTTP本身是一個(gè)無(wú)狀態(tài)的連接協(xié)議,為了支持客戶(hù)端與服務(wù)器之間的交互,我們就需要通過(guò)不同的技術(shù)為交互存儲(chǔ)狀態(tài),而這些不同的技術(shù)就是Cookie和Session了。 Cookie是通過(guò)客戶(hù)端保持狀態(tài)的解決方案。從定義上來(lái)說(shuō),Cookie就是由服務(wù)器發(fā)給客戶(hù)端的特殊信息,而這些信息以文本文件的方式存放在客戶(hù)端,然后客戶(hù)端每次向服務(wù)器發(fā)送請(qǐng)求的時(shí)候都會(huì)帶上這些特殊的信息。讓我們說(shuō)得更具體一些:當(dāng)用戶(hù)使用瀏覽器訪問(wèn)一個(gè)支持Cookie的網(wǎng)站的時(shí)候,用戶(hù)會(huì)提供包括用戶(hù)名在內(nèi)的個(gè)人信息并且提交至服務(wù)器;接著,服務(wù)器在向客戶(hù)端回傳相應(yīng)的超文本的同時(shí)也會(huì)發(fā)回這些個(gè)人信息,當(dāng)然這些信息并不是存放在HTTP響應(yīng)體(Response Body)中的,而是存放于HTTP響應(yīng)頭(Response Header);當(dāng)客戶(hù)端瀏覽器接收到來(lái)自服務(wù)器的響應(yīng)之后,瀏覽器會(huì)將這些信息存放在一個(gè)統(tǒng)一的位置,對(duì)于Windows操作系統(tǒng)而言,我們可以從: [系統(tǒng)盤(pán)]:\Documents and Settings\[用戶(hù)名]\Cookies目錄中找到存儲(chǔ)的Cookie;自此,客戶(hù)端再向服務(wù)器發(fā)送請(qǐng)求的時(shí)候,都會(huì)把相應(yīng)的Cookie再次發(fā)回至服務(wù)器。而這次,Cookie信息則存放在HTTP請(qǐng)求頭(Request Header)了。 有了Cookie這樣的技術(shù)實(shí)現(xiàn),服務(wù)器在接收到來(lái)自客戶(hù)端瀏覽器的請(qǐng)求之后,就能夠通過(guò)分析存放于請(qǐng)求頭的Cookie得到客戶(hù)端特有的信息,從而動(dòng)態(tài)生成與該客戶(hù)端相對(duì)應(yīng)的內(nèi)容。通常,我們可以從很多網(wǎng)站的登錄界面中看到“請(qǐng)記住我”這樣的選項(xiàng),如果你勾選了它之后再登錄,那么在下一次訪問(wèn)該網(wǎng)站的時(shí)候就不需要進(jìn)行重復(fù)而繁瑣的登錄動(dòng)作了,而這個(gè)功能就是通過(guò)Cookie實(shí)現(xiàn)的。 與Cookie相對(duì)的一個(gè)解決方案是Session,它是通過(guò)服務(wù)器來(lái)保持狀態(tài)的。由于Session這個(gè)詞匯包含的語(yǔ)義很多,因此需要在這里明確一下 Session的含義。首先,我們通常都會(huì)把Session翻譯成會(huì)話,因此我們可以把客戶(hù)端瀏覽器與服務(wù)器之間一系列交互的動(dòng)作稱(chēng)為一個(gè) Session。從這個(gè)語(yǔ)義出發(fā),我們會(huì)提到Session持續(xù)的時(shí)間,會(huì)提到在Session過(guò)程中進(jìn)行了什么操作等等;其次,Session指的是服務(wù)器端為客戶(hù)端所開(kāi)辟的存儲(chǔ)空間,在其中保存的信息就是用于保持狀態(tài)。從這個(gè)語(yǔ)義出發(fā),我們則會(huì)提到往Session中存放什么內(nèi)容,如何根據(jù)鍵值從 Session中獲取匹配的內(nèi)容等。 要使用Session,第一步當(dāng)然是創(chuàng)建Session了。那么Session在何時(shí)創(chuàng)建呢?當(dāng)然還是在服務(wù)器端程序運(yùn)行的過(guò)程中創(chuàng)建的,不同語(yǔ)言實(shí)現(xiàn)的應(yīng)用程序有不同創(chuàng)建Session的方法,而在Java中是通過(guò)調(diào)用HttpServletRequest的getSession方法(使用true作為參數(shù))創(chuàng)建的。在創(chuàng)建了Session的同時(shí),服務(wù)器會(huì)為該Session生成唯一的Session id,而這個(gè)Session id在隨后的請(qǐng)求中會(huì)被用來(lái)重新獲得已經(jīng)創(chuàng)建的Session;在Session被創(chuàng)建之后,就可以調(diào)用Session相關(guān)的方法往Session中增加內(nèi)容了,而這些內(nèi)容只會(huì)保存在服務(wù)器中,發(fā)到客戶(hù)端的只有Session id;當(dāng)客戶(hù)端再次發(fā)送請(qǐng)求的時(shí)候,會(huì)將這個(gè)Session id帶上,服務(wù)器接受到請(qǐng)求之后就會(huì)依據(jù)Session id找到相應(yīng)的Session,從而再次使用之。正式這樣一個(gè)過(guò)程,用戶(hù)的狀態(tài)也就得以保持了。 綜上所述,HTTP本身是一個(gè)無(wú)狀態(tài)的連接協(xié)議,為了支持客戶(hù)端與服務(wù)器之間的交互,我們就需要通過(guò)不同的技術(shù)為交互存儲(chǔ)狀態(tài),而這些不同的技術(shù)就是Cookie和Session了。