前言
做了很多項(xiàng)目,好像對 axios每次請求時 要攜帶 時間戳和token的原因,還是不明確。所以,記錄下來,便于時時查看。
時間戳
原因: 因?yàn)闉g覽器具有基于url建立的緩存機(jī)制
當(dāng)瀏覽器向相同的鏈接發(fā)送請求時,瀏覽器的緩存機(jī)制就會獲取之前訪問的相同URL時保留下來的緩存資源。 所以為了確保每次請求都是一個不同于之前的請求。
在請求時,加上時間戳,能避免瀏覽器對URL的緩存。
token
背景
在客戶端頻繁向服務(wù)端請求數(shù)據(jù),服務(wù)器頻繁的去數(shù)據(jù)庫查詢用戶名和密碼并進(jìn)行比對,判斷用戶名和密碼正確與否,并做出相應(yīng)的提示,在這樣的背景下,token便應(yīng)運(yùn)而生。
(另一種說法: 用戶登錄成功后, 需要反復(fù)到服務(wù)器獲取敏感數(shù)據(jù),服務(wù)器對每次請求都要驗(yàn)證是哪位用戶發(fā)送的, 且用戶是否合法, 需要反復(fù)查詢數(shù)據(jù)庫, 對數(shù)據(jù)庫造成過大壓力)
實(shí)質(zhì)
token是在服務(wù)端產(chǎn)生的一串字符串,以作客戶端進(jìn)行請求的一個令牌。 如果前端使用用戶名/密碼向服務(wù)端請求認(rèn)證,服務(wù)端認(rèn)證成功,就會返回一個token給前端,前端可以在每次請求的時候帶上token 證明自己的合法地位。 如果這個token 在服務(wù)端持久化(比如存入數(shù)據(jù)庫),那它就是個永久的身份令牌(除非設(shè)置了有效期)
(另一種說法: Token是服務(wù)端生成的一串字符串,以作客戶端進(jìn)行請求的一個令牌,當(dāng)?shù)谝淮蔚卿浐?,服?wù)器生成一個Token便將此Token返回給客戶端,以后客戶端只需帶上這個Token前來請求數(shù)據(jù)即可,無需再次帶上用戶名和密碼)
優(yōu)勢
1 支持跨域訪問: cookie是不允許跨域訪問的, token支持
2 無狀態(tài): token不需要服務(wù)器保存任何相關(guān)信息. token自身就攜帶所有值
3 去耦: 不需要綁定特定的身份驗(yàn)證方案
4 更適合移動應(yīng)用: cookie不支持手機(jī)端訪問
5 基于標(biāo)準(zhǔn)化:JWT
缺陷
1 占帶寬: 比session_id 大, 消耗更多的流量
2 無法在服務(wù)端注銷: 很難解決劫持問題
3 性能問題: JWT標(biāo)準(zhǔn)消耗更多的 CPU 資源
借鑒:
https://blog.csdn.net/JiangLu7/article/details/131139285
https://blog.51cto.com/u_16099249/9095244
https://blog.csdn.net/Joye_7y/article/details/128268044