日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

淺談HTTP的無狀態(tài)性

 風(fēng)自向前 2011-03-03

http://www./html/11/349.html


HTTP是Hyper Text Transfer Protocol的縮寫,顧名思義,這個協(xié)議支持著超文本的傳輸。那么什么是超文本呢?說白了就是使用HTML編寫的頁面。通常,我們使用客戶端瀏覽器訪問服務(wù)器的資源,最常見的URL也是以html為后綴的文件。因此,我們可以說超文本是網(wǎng)絡(luò)上最主要的資源。

        既然HTTP協(xié)議的目的在于支持超文本的傳輸,更加廣義一些就是支持資源的傳輸,那么在客戶端瀏覽器向HTTP服務(wù)器發(fā)送請求,繼而HTTP服務(wù)器將相應(yīng)的資源發(fā)回給客戶端這樣一個過程中,無論對于客戶端還是服務(wù)器,都沒有必要記錄這個過程,因為每一次請求和響應(yīng)都是相對獨立的,就好像你在自動售貨機前投下硬幣購買商品一樣,誰都不會也不需要記住這樣一個交易過程。

     一般而言,一個URL對應(yīng)著唯一的超文本,而HTTP服務(wù)器也絕對公平公正,不管你是Michael,還是Jordon,它都會根據(jù)接收到的URL請求返回相同的超文本。正是因為這樣的唯一性,使得記錄用戶的行為狀態(tài)變得毫無意義,所以,HTTP協(xié)議被設(shè)計為無狀態(tài)的連接協(xié)議符合它本身的需求。

然而,隨著時間的推移,人們發(fā)現(xiàn)靜態(tài)的HTML著實無聊而乏味,增加動態(tài)生成的內(nèi)容才會令Web應(yīng)用程序變得更加有用。于是乎,HTML的語法在不斷膨脹,其中最重要的是增加了表單(Form);客戶端也增加了諸如腳本處理、DOM處理等功能;對于服務(wù)器,則相應(yīng)的出現(xiàn)了CGI(Common Gateway Interface)以處理包含表單提交在內(nèi)的動態(tài)請求。在這種客戶端與服務(wù)器進行動態(tài)交互的Web應(yīng)用程序出現(xiàn)之后,HTTP無狀態(tài)的特性嚴(yán)重阻礙了這些應(yīng)用程序的實現(xiàn),畢竟交互是需要承前啟后的,簡單的購物車程序也要知道用戶到底在之前選擇了什么商品。于是,兩種用于保持HTTP連接狀態(tài)的技術(shù)就應(yīng)運而生了,一個是Cookie,而另一個則是Session。

        Cookie是通過客戶端保持狀態(tài)的解決方案。從定義上來說,Cookie就是由服務(wù)器發(fā)給客戶端的特殊信息,而這些信息以文本文件的方式存放在客戶端,然后客戶端每次向服務(wù)器發(fā)送請求的時候都會帶上這些特殊的信息。讓我們說得更具體一些:當(dāng)用戶使用瀏覽器訪問一個支持Cookie的網(wǎng)站的時候,用戶會提供包括用戶名在內(nèi)的個人信息并且提交至服務(wù)器;接著,服務(wù)器在向客戶端回傳相應(yīng)的超文本的同時也會發(fā)回這些個人信息,當(dāng)然這些信息并不是存放在HTTP響應(yīng)體(Response Body)中的,而是存放于HTTP響應(yīng)頭(Response Header);當(dāng)客戶端瀏覽器接收到來自服務(wù)器的響應(yīng)之后,瀏覽器會將這些信息存放在一個統(tǒng)一的位置,對于Windows操作系統(tǒng)而言,我們可以從:[系統(tǒng)盤]:\Documents and Settings\[用戶名]\Cookies目錄中找到存儲的Cookie;自此,客戶端再向服務(wù)器發(fā)送請求的時候,都會把相應(yīng)的Cookie再次發(fā)回至服務(wù)器。而這次,Cookie信息則存放在HTTP請求頭(Request Header)了。

        有了Cookie這樣的技術(shù)實現(xiàn),服務(wù)器在接收到來自客戶端瀏覽器的請求之后,就能夠通過分析存放于請求頭的Cookie得到客戶端特有的信息,從而動態(tài)生成與該客戶端相對應(yīng)的內(nèi)容。通常,我們可以從很多網(wǎng)站的登錄界面中看到“請記住我”這樣的選項,如果你勾選了它之后再登錄,那么在下一次訪問該網(wǎng)站的時候就不需要進行重復(fù)而繁瑣的登錄動作了,而這個功能就是通過Cookie實現(xiàn)的。
    
        與Cookie相對的一個解決方案是Session,它是通過服務(wù)器來保持狀態(tài)的。由于Session這個詞匯包含的語義很多,因此需要在這里明確一下Session的含義。首先,我們通常都會把Session翻譯成會話,因此我們可以把客戶端瀏覽器與服務(wù)器之間一系列交互的動作稱為一個Session。從這個語義出發(fā),我們會提到Session持續(xù)的時間,會提到在Session過程中進行了什么操作等等;其次,Session指的是服務(wù)器端為客戶端所開辟的存儲空間,在其中保存的信息就是用于保持狀態(tài)。從這個語義出發(fā),我們則會提到往Session中存放什么內(nèi)容,如何根據(jù)鍵值從Session中獲取匹配的內(nèi)容等。

        要使用Session,第一步當(dāng)然是創(chuàng)建Session了。那么Session在何時創(chuàng)建呢?當(dāng)然還是在服務(wù)器端程序運行的過程中創(chuàng)建的,不同語言實現(xiàn)的應(yīng)用程序有不同創(chuàng)建Session的方法,而在Java中是通過調(diào)用HttpServletRequest的getSession方法(使用true作為參數(shù))創(chuàng)建的。在創(chuàng)建了Session的同時,服務(wù)器會為該Session生成唯一的Session id,而這個Session id在隨后的請求中會被用來重新獲得已經(jīng)創(chuàng)建的Session;在Session被創(chuàng)建之后,就可以調(diào)用Session相關(guān)的方法往Session中增加內(nèi)容了,而這些內(nèi)容只會保存在服務(wù)器中,發(fā)到客戶端的只有Session id;當(dāng)客戶端再次發(fā)送請求的時候,會將這個Session id帶上,服務(wù)器接受到請求之后就會依據(jù)Session id找到相應(yīng)的Session,從而再次使用之。正式這樣一個過程,用戶的狀態(tài)也就得以保持了。

        綜上所述,HTTP本身是一個無狀態(tài)的連接協(xié)議,為了支持客戶端與服務(wù)器之間的交互,我們就需要通過不同的技術(shù)為交互存儲狀態(tài),而這些不同的技術(shù)就是Cookie和Session了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多