Http cookie解析

為什么要cookie?

HTTP協議是無狀態的,也就是說客戶端和服務器端不需要建立持久的連接。由于客戶端和服務器的連接是基于一種請求應答模式,及客戶端和服務器建立一個連接,客戶端提交一個請求,服務器端收到請求后返回一個響應,然后二者就斷開連接。

既然客戶端和服務器在完成一次請求以后,彼此就斷開了連接,二者之間就不再有任何關系了;比如,用戶在頁面一進行了登錄,當用戶跳轉到了同一個Web應用的頁面二,那么如何在頁面二知道用戶已經進行了登錄呢?It’s a question!!! 當客戶端再次發起請求的時候,服務器端如何判斷兩次不同的請求來自同一個客戶端呢?

是的,服務器無法區分每一次請求之間的聯系。這就需要有一個狀態來標識每一次請求,如果兩次請求的狀態標識是一樣的,這就表明這兩個請求是從同一個客戶端發起的。

于是24歲的網景公司的moutulli針對這問題設計出cookie的雛形.

cookie工作原理

下面我通過瀏覽器向www.baidu.com發起請求,并簡單的將cookie的工作原理圖繪制出來。

cookie工作原理.png

cookie在客戶端和服務器之間進行傳遞信息的基本過程:

1.首次向百度發起首次請求;

2.當請求到達百度的服務器以后,百度的服務器需要生成響應,并會在響應的頭部寫入cookie信息;
服務器通過發送一個帶有Set-Cookie的HTTP消息響應頭來創建一個cookie,并設置cookie的一些屬性;

3.當客戶端瀏覽器接收到響應頭以后,會將cookie信息寫入本地進行管理;

4.當再次向百度服務器發起請求時,客戶端會將之前寫入的cookie一起發送過去;
客戶端通過發送一個帶有Cookie: name=value; name2=value2的HTTP請求頭來向服務器發送本地的cookie數據;

5.服務器接收到請求以后,從請求頭中獲得cookie信息,分析cookie數據,再向客戶端響應。

個人建議:對cookie的操作最好放在后臺.因為cookie本身是存儲在瀏覽器中的字符串,如果在前端用document.cookie來獲取cookie可能比較麻煩,需要分割字符串等;后臺通過cookie-parser來解析你需要的cookie數據.

cookie可選參數

可選的 cookie 參數會影響將 cookie 發送給服務器端的過程,主要有以下幾種:

  • path:表示 cookie 影響到的路徑,匹配該路徑才發送這個 cookie
  • expiresmaxAge:告訴瀏覽器這個 cookie 什么時候過期,expires 是 UTC 格式時間,maxAgecookie 多久后過期的相對時間。當不設置這兩個選項時,會產生 session cookiesession cookietransient 的,當用戶關閉瀏覽器時,就被清除。一般用來保存 sessionsession_id
    secure:當 secure 值為 true 時,cookie 在 HTTP 中是無效,在 HTTPS 中才有效。
    httpOnly:瀏覽器不允許腳本操作 document.cookie 去更改 cookie。一般情況下都應該設置這個為 true,這樣可以避免被 xss 攻擊拿到 cookie

cookie的生命周期

cookie是有生命周期的,一旦到了cookie的失效日期,客戶端的cookie就會被刪除。服務器在創建cookie時可以控制一個cookie可以在客戶端“存活”多長時間。在以下幾種情況下,cookie都會結束它自己的生命周期:

  • 未指定過期時間的cookie:當服務器創建一個cookie的時候沒有指定對應的過期時間時,客戶端會將這類cookie寫入瀏覽器開辟的一塊內存中,當關閉瀏覽器以后,這塊內存也就被釋放了,對應的cookie也就是結束了它的生命;
  • 指定過期時間的cookie:當服務器創建一個cookie的時候指定了對應的過期時間時,當到達了過期時間時,對應的cookie就會被刪除;
  • 當瀏覽器中的cookie數量達到了限制時,那么瀏覽器就會按照某種策略刪除一些舊的cookie,騰出空間來創建新的cookie;
  • 當然了,我們也可以手動的人為刪除cookie。

cookie的缺點

  • 安全性:由于cookie在HTTP中是明文傳遞的,其中包含的數據都可以被他人訪問,可能會被篡改、盜用。
  • 大小限制:cookie的大小限制在4KB左右,若要做大量存儲顯然不是理想的選擇。
  • 增加流量:cookie每次請求都會被自動添加到Request Header中,無形中增加了流量。cookie信息越大,對服務器請求的時間也越長。

express-cookie-demo

const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

app.get('/', function (req, res) {
   res.send('Hello, world!');
});

app.get('/set-cookies', function (req, res) {
   res.cookie('token', 'mike:123456').end();
});

app.get('/cookies', function (req, res) {
   res.send(req.cookies);
});

app.listen(3000, function () {
    console.log('Server listening at http://localhost:3000');
});

參考資料:
http://www.jellythink.com/archives/1389
http://wiki.jikexueyuan.com/project/node-lessons/cookie-session.html
https://segmentfault.com/a/1190000004743454

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容