HTTP cookies 詳解

HTTP cookies,通常又稱作"cookies"欢唾,已經(jīng)存在了很長時(shí)間礁遣,但是仍舊沒有被予以充分的理解。首要的問題是存在了諸多誤區(qū)杏头,認(rèn)為cookies是后門程序或病毒沸呐,或壓根不知道它是如何工作的。第二個(gè)問題是對(duì)于cookies缺少一個(gè)一致性的接口寓娩。盡管存在著這些問題滥朱,cookies仍舊在web開發(fā)中起著如此重要的作用力试,以至于如果cookie在沒有可替代品出現(xiàn)的情況下消失畸裳,我們?cè)S多喜歡的Web應(yīng)用將變得毫無用處。

cookies的起源

早期Web開發(fā)面臨的最大問題之一是如何管理狀態(tài)帅容。簡(jiǎn)言之伍伤,服務(wù)器端沒有辦法知道兩個(gè)請(qǐng)求是否來自于同一個(gè)瀏覽器。那時(shí)的辦法是在請(qǐng)求的頁面中插入一個(gè)token麦乞,并且在下一次請(qǐng)求中將這個(gè)token返回(至服務(wù)器)劝评。這就需要在form中插入一個(gè)包含token的隱藏表單域,或著在URL的qurey字符串中傳遞該token声畏。這兩種辦法都強(qiáng)調(diào)手工操作并且極易出錯(cuò)姻成。

LouMontulli,那時(shí)是網(wǎng)景通訊的一個(gè)雇員愿棋,被認(rèn)為在1994年將“magic cookies”的概念應(yīng)用到了web通訊中初斑。他意圖解決的是web中的購物車膨处,現(xiàn)在所有購物網(wǎng)站都依賴購物車。他的最早的說明文檔提供了一些cookies工作原理的基本信息該文檔在RFC2109中被規(guī)范化(這是所有瀏覽器實(shí)現(xiàn)cookies的參考依據(jù))鹃答,并且最終逐步形成了REF2965.Montulli最終也被授予了關(guān)于cookies的美國專利测摔。網(wǎng)景瀏覽器在它的第一個(gè)版本中就開始支持cookies解恰,并且當(dāng)前所有web瀏覽器都支持cookies。

cookie是什么挟纱?

坦白的說腐宋,一個(gè)cookie就是存儲(chǔ)在用戶主機(jī)瀏覽器中的一小段文本文件。Cookies是純文本形式欺嗤,它們不包含任何可執(zhí)行代碼卫枝。一個(gè)Web頁面或服務(wù)器告之瀏覽器來將這些信息存儲(chǔ)并且基于一系列規(guī)則在之后的每個(gè)請(qǐng)求中都將該信息返回至服務(wù)器校赤。Web服務(wù)器之后可以利用這些信息來標(biāo)識(shí)用戶。多數(shù)需要登錄的站點(diǎn)通常會(huì)在你的認(rèn)證信息通過后來設(shè)置一個(gè)cookie衰伯,之后只要這個(gè)cookie存在并且合法积蔚,你就可以自由的瀏覽這個(gè)站點(diǎn)的所有部分。再次怎顾,cookie只是包含了數(shù)據(jù),就其本身而言并不有害夭委。

Cookie總是保存在客戶端中募强,按在客戶端中的存儲(chǔ)位置擎值,可分為內(nèi)存Cookie和硬盤Cookie。內(nèi)存Cookie由瀏覽器維護(hù)屹蚊,保存在內(nèi)存中进每,瀏覽器關(guān)閉后就消失了,其存在時(shí)間是短暫的嘱兼。硬盤Cookie保存在硬盤里肉瓦,有一個(gè)過期時(shí)間泞莉,除非...

Cookie總是保存在客戶端中船殉,按在客戶端中的存儲(chǔ)位置,可分為內(nèi)存Cookie和硬盤Cookie挨厚。內(nèi)存Cookie由瀏覽器維護(hù)糠惫,保存在內(nèi)存中,瀏覽器關(guān)閉后就消失了巢价,其存在時(shí)間是短暫的。硬盤Cookie保存在硬盤里城菊,有一個(gè)過期時(shí)間凌唬,除非用戶手工清理或到了過期時(shí)間漏麦,硬盤Cookie不會(huì)被刪除,其存在時(shí)間是長期的霎挟。所以麻掸,按存在時(shí)間,可分為非持久Cookie和持久Cookie熬北。

1.cookie的屬性

一般cookie所具有的屬性诚隙,包括:

Domain:域久又,表示當(dāng)前cookie所屬于哪個(gè)域或子域下面。

此處需要額外注意的是炉峰,在C#中脉执,如果一個(gè)cookie不設(shè)置對(duì)應(yīng)的Domain半夷,那么在CookieContainer.Add(cookies)的時(shí)候,會(huì)死掉淘邻。對(duì)于服務(wù)器返回的Set-Cookie中湘换,如果沒有指定Domain的值宾舅,那么其Domain的值是默認(rèn)為當(dāng)前所提交的http的請(qǐng)求所對(duì)應(yīng)的主域名的敬尺。比如訪問 http://www.example.com,返回一個(gè)cookie贴浙,沒有指名domain值砂吞,那么其為值為默認(rèn)的www.example.com。

Path:表示cookie的所屬路徑崎溃。

Expire time/Max-age:表示了cookie的有效期蜻直。expire的值,是一個(gè)時(shí)間袁串,過了這個(gè)時(shí)間概而,該cookie就失效了〈研蓿或者是用max-age指定當(dāng)前cookie是在多長時(shí)間之后而失效。如果服務(wù)器返回的一個(gè)cookie破镰,沒有指定其expire time餐曼,那么表明此cookie有效期只是當(dāng)前的session,即是session cookie鲜漩,當(dāng)前session會(huì)話結(jié)束后源譬,就過期了。對(duì)應(yīng)的孕似,當(dāng)關(guān)閉(瀏覽器中)該頁面的時(shí)候踩娘,此cookie就應(yīng)該被瀏覽器所刪除了。

secure:表示該cookie只能用https傳輸喉祭。一般用于包含認(rèn)證信息的cookie养渴,要求傳輸此cookie的時(shí)候,必須用https傳輸泛烙。

httponly:表示此cookie必須用于http或https傳輸理卑。這意味著,瀏覽器腳本胶惰,比如javascript中傻工,是不允許訪問操作此cookie的霞溪。

2.服務(wù)器發(fā)送cookie給客戶端

從服務(wù)器端孵滞,發(fā)送cookie給客戶端,是對(duì)應(yīng)的Set-Cookie鸯匹。包括了對(duì)應(yīng)的cookie的名稱坊饶,值,以及各個(gè)屬性殴蓬。

例如:

Set-Cookie: lu=Rg3vHJZnehYLjVg7qi3bZjzg; Expires=Tue, 15 Jan 2013 21:47:38 GMT; Path=/; Domain=.169it.com; HttpOnly

Set-Cookie: made_write_conn=1295214458; Path=/; Domain=.169it.com

Set-Cookie: reg_fb_gate=deleted; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Path=/; Domain=.169it.com; HttpOnly

3.從客戶端把cookie發(fā)送到服務(wù)器

從客戶端發(fā)送cookie給服務(wù)器的時(shí)候匿级,是不發(fā)送cookie的各個(gè)屬性的蟋滴,而只是發(fā)送對(duì)應(yīng)的名稱和值。

例如:

GET /spec.html HTTP/1.1

Host: www.example.org

Cookie: name=value; name2=value2

Accept: */*

4.關(guān)于修改痘绎,設(shè)置cookie

除了服務(wù)器發(fā)送給客戶端(瀏覽器)的時(shí)候津函,通過Set-Cookie,創(chuàng)建或更新對(duì)應(yīng)的cookie之外孤页,還可以通過瀏覽器內(nèi)置的一些腳本尔苦,比如javascript,去設(shè)置對(duì)應(yīng)的cookie行施,對(duì)應(yīng)實(shí)現(xiàn)是操作js中的document.cookie允坚。

5.Cookie的缺陷

(1)cookie會(huì)被附加在每個(gè)HTTP請(qǐng)求中,所以無形中增加了流量蛾号。

(2)由于在HTTP請(qǐng)求中的cookie是明文傳遞的稠项,所以安全性成問題。(除非用HTTPS)

(3)Cookie的大小限制在4KB左右鲜结。對(duì)于復(fù)雜的存儲(chǔ)需求來說是不夠用的展运。


轉(zhuǎn)載 -- http://www.169it.com/article/3217120921.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市精刷,隨后出現(xiàn)的幾起案子乐疆,更是在濱河造成了極大的恐慌,老刑警劉巖贬养,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挤土,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡误算,警方通過查閱死者的電腦和手機(jī)仰美,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儿礼,“玉大人咖杂,你說我怎么就攤上這事∥梅颍” “怎么了诉字?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長知纷。 經(jīng)常有香客問我壤圃,道長,這世上最難降的妖魔是什么琅轧? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任伍绳,我火速辦了婚禮,結(jié)果婚禮上乍桂,老公的妹妹穿的比我還像新娘冲杀。我一直安慰自己效床,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布权谁。 她就那樣靜靜地躺著剩檀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旺芽。 梳的紋絲不亂的頭發(fā)上谨朝,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音甥绿,去河邊找鬼字币。 笑死,一個(gè)胖子當(dāng)著我的面吹牛共缕,可吹牛的內(nèi)容都是我干的洗出。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼图谷,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼翩活!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起便贵,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤菠镇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后承璃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體利耍,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年盔粹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了隘梨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舷嗡,死狀恐怖轴猎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情进萄,我是刑警寧澤捻脖,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站中鼠,受9級(jí)特大地震影響可婶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兜蠕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一扰肌、第九天 我趴在偏房一處隱蔽的房頂上張望抛寝。 院中可真熱鬧熊杨,春花似錦曙旭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至川陆,卻和暖如春剂习,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背较沪。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國打工鳞绕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尸曼。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓们何,卻偏偏與公主長得像,于是被迫代替她去往敵國和親控轿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冤竹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容