www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]這篇文章其實(shí)源于一次我的面試經(jīng)歷。那次我面對是一位老面試官,真的很有東西。那次面試我和他叨叨了兩小時(shí)....我滴媽我嘴巴都干了真的。他的提問都很有深度,可以說對我的學(xué)習(xí)之路有很大的幫助。

這篇文章其實(shí)源于一次我的面試經(jīng)歷。

那次我面對是一位老面試官,真的很有東西。

那次面試我和他叨叨了兩小時(shí)....我滴媽我嘴巴都干了真的。

他的提問都很有深度,可以說對我的學(xué)習(xí)之路有很大的幫助。

我記得有個(gè)問題,差不多是面了一個(gè)小時(shí)的時(shí)候他問我:Cookie、Session、Token知道的吧?

我說:知道。

那你從演進(jìn)的角度來講講 Cookie 、Session、Token?

我當(dāng)時(shí)就懵了,單獨(dú)的說我都清楚,這演進(jìn)的角度讓我一下不知從何說起。

這個(gè)面試官會(huì)從各個(gè)角度去感受我對一個(gè)知識點(diǎn)到底是背的,還是有自己理解的。

他提問的方式真的很有東西,他也給我反饋了很多他的理解,相談甚歡,真的。

就這個(gè)問題他從 HTTP 無狀態(tài)開始慢慢的引導(dǎo)我.....

他的這波引導(dǎo)其實(shí)就串聯(lián)起了這一系列的知識點(diǎn),零散的東西就被他整理的明明白白。

所以后來的學(xué)習(xí)我都喜歡找緣由,也就是為什么。

也是我一直強(qiáng)調(diào)的要知道:為什么會(huì)有這個(gè)東西的存在,這個(gè)的東西是為了解決什么痛點(diǎn)。

起初是因?yàn)槲遗旅嬖嚬僭賳栁疫@樣的問題。

現(xiàn)在是因?yàn)?span style="font-weight: 600;color: rgb(60, 112, 198);">就應(yīng)該這樣學(xué)。

今兒就來捋捋之前面試官問我的這個(gè)題的。

正文

1990 年。

蒂姆·伯納斯·李創(chuàng)建了 HTTP 協(xié)議。

李老的想法是把文檔存儲(chǔ)在服務(wù)器中,誰需要這個(gè)文檔直接從服務(wù)器獲取即可。

按照這個(gè)思想,當(dāng)時(shí)的需求只有 GET。

并且按照拿文檔的思路:拿完了連接就可以斷了,也不需要什么交互。

所以 HTTP 起初的設(shè)計(jì)就是無狀態(tài)的。

也就是請求和請求之間是沒有關(guān)聯(lián)的。

而隨著互聯(lián)網(wǎng)的發(fā)展,交互開始興起。

人們不再滿足簡單的靜態(tài)文件獲取,各種購物、社交接踵而至。

這意味著服務(wù)器需要判斷每個(gè)請求的發(fā)起者是誰,也就是需要狀態(tài)。

你聊天總得表明你是誰,并且和誰聊吧?不然服務(wù)器可不知這聊天信息得發(fā)給誰。

你購物總得讓服務(wù)器知道是誰買了這玩意吧?

總不能你買完了下線,再上線發(fā)現(xiàn)你買的東西沒了。

這時(shí)候就是需要一種技術(shù)讓請求與請求之間建立起聯(lián)系,讓請求變得有狀態(tài)。

這技術(shù)叫 Cookie,就是一個(gè)以 Key-Value 格式存儲(chǔ)的小文件,保存在客戶端本地。

比如登錄之后,服務(wù)器就能設(shè)置 Cookie 返回給瀏覽器,然后保存在本地。

隨便截了個(gè)百度的,列出來的就是 key,下拉箭頭打開里面就有 value。

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

之后對百度的請求就可以帶著 Cookie 去訪問服務(wù)器,這里假設(shè) BAIDUID 是用戶 ID。

百度的服務(wù)器一看原來是這個(gè) ID 啊,就知道是“我”請求了,這就有狀態(tài)了。

簡單地說 Cookie 就是存儲(chǔ)在本地的一份文件,每次請求都會(huì)帶上 Cookie 去訪問服務(wù)器。

所以把一些用戶信息塞到 Cookie 里,這樣服務(wù)器就能判別是哪個(gè)用戶的請求了

注意 Cookie 是有域的劃分的,來看下這個(gè)圖:

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

也就是每個(gè)域下面都有各自的 Cookie ,訪問不同的網(wǎng)站帶屬于這個(gè)網(wǎng)站的 Cookie ,不會(huì)帶別人的 Cookie ,不然就亂套了。

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

但是 Cookie 是明文存儲(chǔ)在用戶本地,而且?guī)в写罅康挠脩粜畔?/span>這不太安全。

并且每次請求都需要帶這么多 Cookie 對帶寬來說也不太劃算。

Session 就解決了這個(gè)問題,Session 就是會(huì)話,它有更加廣泛的含義,在和 Cookie 這些一起談?wù)摰膱鼍埃覀儼阉M義化。

Session 就是把用戶的會(huì)話信息存儲(chǔ)在服務(wù)端。

然后頒發(fā)給客戶端一個(gè) sessionId,讓客戶端之后帶著 sessionId 來請求。

這樣服務(wù)端就可以通過 sessionId 去找到這個(gè)用戶的信息,從而識別請求。

那客戶端是如何帶上 sessionId 的?

這個(gè) sessionId 還是按照 Cookie 的形式存儲(chǔ)在用戶的本地,發(fā)起請求的時(shí)候帶上即可。

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

但是把這種狀態(tài)信息存儲(chǔ)到服務(wù)器中使得服務(wù)器就有狀態(tài)了。

一般我們部署在線上的服務(wù)器會(huì)有多臺(tái)來做負(fù)載均衡,也互相作為 backup。

所以如果 Session 的信息存在某一臺(tái)機(jī)器上,那么當(dāng)下一次請求被負(fù)載分到另一臺(tái)機(jī)器那就找不到這個(gè) Session 信息了。

也就不認(rèn)得這個(gè)請求了,可能的現(xiàn)象就是告訴用戶沒登錄,那用戶不就傻了。

我這剛還登錄著呢,這就告訴我沒登錄了?

所以處理方式有 session 復(fù)制,就是服務(wù)器之間互相同步 session,這樣不論請求到哪個(gè)服務(wù)器都有用戶的信息。

不過這復(fù)制就冗余了,有額外的開銷。

還有一種就是 session sticky,其實(shí)就是把你的請求一直粘在某一個(gè)服務(wù)器上,如果你請求的一開始被指派的是 A 服務(wù)器,那么之后的所有請求都只會(huì)被指派到 A 服務(wù)器上。

但是如果 A 服務(wù)器掛了,你的請求還是會(huì)被指派到別的服務(wù)器上,這樣一來用戶登錄信息還是會(huì)丟了。

可以看到復(fù)制和 sticky 都有缺陷,所以可以把 session 放到第三方存儲(chǔ),比如 Redis 里。

這樣服務(wù)器等于又沒狀態(tài)了。

而服務(wù)器的無狀態(tài)意味著可以隨意伸縮,服務(wù)集群根據(jù)流量加幾臺(tái)減幾臺(tái),很方便。

但是把 session 放第三方存儲(chǔ)上只是把這個(gè)維護(hù)從服務(wù)器轉(zhuǎn)嫁到第三方身上。

第三方得保證它的高可用,不然用戶登錄信息又會(huì)丟了。

不過一般而言我們的系統(tǒng)本來就要維護(hù)的第三方存儲(chǔ),所以影響不大。

小結(jié)一下:Cookie 明文存儲(chǔ)在本地不太安全,所以想著把用戶狀態(tài)存在服務(wù)端,而 Session 就是將用戶狀態(tài)信息保存在服務(wù)端。

就暴露 sessionId 給客戶端,這樣相對而言安全些,并且也減少了網(wǎng)絡(luò)流量。

但這樣服務(wù)端就有狀態(tài)了,難以擴(kuò)展。

因此可以把 Session 放到第三方存儲(chǔ)上,但是等于狀態(tài)還是由服務(wù)端維護(hù)。

Token

其實(shí)仔細(xì)想想,是不是不需要在服務(wù)端存儲(chǔ)用戶的信息?

只需要一個(gè)能代表身份的憑證即可,一個(gè)服務(wù)端頒發(fā)給用戶憑證,之后的請求讓用戶帶著這個(gè)憑證就行。

就像我們的身份證,就代表我們。

這個(gè)憑證里面就包含了用戶的信息,有人可能怕憑證被偽造。

沒事,把憑證給簽名了,這樣我們服務(wù)器就能驗(yàn)證憑證的真?zhèn)巍?/p>

和別人做不得假身份證一樣。

這種憑證叫 Token。

如果一個(gè)用戶登錄了系統(tǒng),我就返回一個(gè) Token 給他,之后每次請求他帶著這個(gè) Token 來就行。

服務(wù)器驗(yàn)證了真?zhèn)沃竽玫?Token 里面的用戶信息就知道這個(gè)請求是誰發(fā)的了。

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

這樣服務(wù)器就無狀態(tài)了,是真的無狀態(tài)了,當(dāng)然客戶端有狀態(tài)了。

由客戶端來保存 Token ,這樣是最合理的,不需要在服務(wù)端冗余數(shù)據(jù)。

有了 Token 之后服務(wù)器因?yàn)闊o狀態(tài)所以可擴(kuò)展,并且 Token 還能跨應(yīng)用使用。

比如同一個(gè)公司不同應(yīng)用之間的調(diào)用,所有應(yīng)用只要能識別這個(gè) Token 就都能登錄。

一個(gè) Token 就搞定了,不用每個(gè)網(wǎng)站都登錄一遍,這就是單點(diǎn)登錄。

如果是第三方服務(wù)提供方也更容易地提供服務(wù),只需要頒發(fā)一個(gè) Token 給調(diào)用者即可。

Token ?簡單的說就是一個(gè)含有憑證信息的令牌,只要服務(wù)器能識別這個(gè)令牌就能根據(jù)令牌的身份進(jìn)行相應(yīng)的響應(yīng)。

其實(shí)這還蘊(yùn)含了時(shí)間換空間的思想,把存儲(chǔ)在服務(wù)器的用戶信息暴露出去,利用簽名來驗(yàn)證 Token 的真?zhèn)巍?/p>

這樣每次請求都需要耗費(fèi)時(shí)間去驗(yàn)簽,不過好處就是不需要存儲(chǔ)信息,也就是時(shí)間換空間。

最后

其實(shí)像 Cookie + Session 除了可擴(kuò)展還有跨域啊、跨站偽造請求等問題。

像 Token 更加靈活,在移動(dòng)端等場景也更加的適用。

有關(guān)文章所講的演進(jìn)看起來好像就是 Cookie => Session =>Token

不是的,這幾個(gè)東西都很有用,文章只是單從認(rèn)證這一方面來看罷了。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

長按訂閱更多精彩▼

之前遇到一位老面試官,問我的問題真的有點(diǎn)東西

如有收獲,點(diǎn)個(gè)在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉