1. 程式人生 > >計算機網路——應用層(二)

計算機網路——應用層(二)

Cookie機制

Cookie機制的由來
Cookie機制是用來解決WEB應用程式之間通訊無狀態問題的。那麼什麼是無狀態呢?簡單來講,就是當你的瀏覽器訪問一個伺服器一段時間之後再去訪問伺服器,這個伺服器並不知道現在的你是不是之前那個你,我們稱這個狀態為無狀態。從伺服器角度來考慮,伺服器知道有人來訪問自己,但不知道那個人是誰。之所以會有這個問題的出現,是因為最初的HTTP協議推出的時候並沒有考慮到這個問題,因為當時的WEB應用功能並不發達,人們只是簡單的想要從某個伺服器獲取一些所需的資訊,像新聞,圖片這類的資料。所有對於伺服器來說,你要什麼我給你什麼就可以了,你是誰對我來說並不重要。

但隨著WEB應用程式的發展,其功能也在不斷地被豐富。而有些功能就對通訊機制提出了新的要求,比如某些網站設定了使用者管理這個功能,像最開始的亞馬遜到後來的淘寶這樣的網站,它們開始需要知道你是誰了,因為如果無法確切的知道你是誰的話,那麼當你挑選完商品進行付款頁面跳轉的時候(相當於一個新的HTTP請求),網站就已經忘了你了,這會造成無法解決的混亂。那麼如何解決這個問題?人們不想重新更改HTTP協議,所有Cookie機制就應運而生了。

我們都知道,瀏覽器和伺服器之間是通過報文的形式來交流的。我們觀察請求報文可以知道請求報文並不包含使用者的資訊,那麼我們是不是可以在報文中加入某個欄位用來作為使用者的自我介紹呢?是的,Cookie就是那個欄位。而這個欄位伺服器必須也要知道,不然你的瀏覽器說自己的Cookie是A,他的瀏覽器也說他的Cookie是A,那伺服器還是不能分辨到底誰是誰。那該怎麼辦呢?解決方法就是讓每個使用者的Cookie由伺服器來設定,伺服器規定你的Cookie是A,他的Cookie是B。那麼當你報文Cookie欄位值為A時,伺服器就能準確的分辨出你來了。

如何實現讓伺服器來設定你的Cookie呢?
通過伺服器返回給你的響應報文來實現,伺服器也在響應報文中加入了一個欄位,這個欄位叫做Set-cookie(設定Cookie)。如果你的瀏覽器發現接收到的響應報文中包含一個set-cookie欄位,且這個欄位的值是A,那麼在之後所有你訪問該伺服器的請求報文中都會自動加入Cookie欄位,且這個欄位的值就是A。所以當你拿著帶有Cookie值為A的請求報文傳送給伺服器時,伺服器就知道了原來你是A使用者。

這樣就解決了在不改變HTTP協議的情況下實現讓伺服器記住使用者的問題。之所以叫那個欄位為Cookie其實得問當時發明這種機制的人,看他們的喜好,他們想叫啥就叫啥,當時他們想叫這玩意兒為Cookie(小甜點),所以我們也得管這玩意兒叫Cookie。

再多講點,因為我們每次訪問伺服器都會加上Cookie,所以瀏覽器會把伺服器給我們Cookie資訊儲存起來,也就是說,Cookie資訊會存在於客戶端瀏覽器中,也就是我們的本地資料夾中。當然,在伺服器那邊也會儲存每個Cookie所對應的使用者資訊。所以久而久之,當我們訪問的網站(伺服器)越來越多的時候,我們本地資料夾中Cookie資訊也會越來越多,我們就需要定期清理Cookie資訊。所以像360在垃圾清洗的時候就會有Cookie清理這個選項。