網站首頁 編程語言 正文
一、web開發模式
目前主流的WEB開發模式有兩種,分別是:
1.基于服務端渲染的傳統WEB開發模式
2.基于前后端分離的新型WEB開發模式
1.服務器渲染的web開發模式
服務器渲染的概念:服務器發送給客戶端的HTML頁面,是在服務器通過字符串的拼接,動態生成的,因此,客戶端需要使用Ajax這樣的技術額外請求頁面的數據
2.服務器端渲染的優缺點
優點:
1.前端耗時少 因為服務器負責動態生成HTML內容,瀏覽器只需要直接渲染頁面即可,尤其是移動端 更省電
2.有利于SEO 因為服務器端響應的是完整的HTML頁面內容,所以爬蟲更容易獲取信息,更有利于SEO
缺點:
1.占用服務器端資源,即服務端完成HTML頁面內容的拼接,如果請求較多,會對服務器造成一定的訪問壓力
2.不利于前后端分離,開發效率低,使用瀏覽器端渲染,則無法進行分工合作,尤其對于前端復雜度高的項目,不利于項目高效開發
3.前后端分離的Web開發模式
前后端分離的概念:前后端分離的開發模式,依賴于Ajax技術的廣泛應用,簡而言之,前后端分離的web開發模式。就是后端只負責API接口,前端使用Ajax調用接口的開發模式
4.前后端分離的優缺點
優點:
1.開發體驗好,前端專注于UI頁面的開發,后端專注于api的開發 且前端有更多的選擇性
2.用戶體驗好 Ajax技術的廣泛應用 極大的提高了用戶的體驗 可以輕松實現頁面的局部刷新
3.減輕了服務器端的渲染能力 因為頁面最終是在每個用戶的瀏覽器中生成的
缺點:
不利于SEO 因為完整的HTML頁面需要在客戶端動態拼接完成,所以爬蟲對無法爬頁面的有效信息。(解決方案:利用Vue React等前端框架的·SSR(server side render)技術能夠很好的解決SEO問題)
5.如何選擇web開發模式
不談業務場景而盲目選擇使用何種開發模式都是耍流氓
1.比如企業級網站 主要功能是展示而沒有復雜的交互 并且需要良好的SEO 則這時我們就需要使用服務器端渲染
2.而類似后臺管理項目 交互性比較強 不需要考慮SEO 那么就可以使用前后端分離的開發模式
另外 具體使用何種開發模式并不是絕對的 為了同時兼顧了首頁的渲染速度和前后端分離的開發模式,一些網站采用了首屏服務器渲染+其他頁面前后端分離的開發模式
二、身份認證
1.什么是身份認證
身份認證又稱“身份驗證”、“鑒權”,是指通過一定的手段,完成對用戶身份的確認
1.日常生活中的身份認證隨處可見,例如:高鐵的驗票乘車,手機的密碼或指紋解鎖,支付寶或微信的支付密碼等
2.在web開發中,也涉及到用戶身份的認證,例如:各大網站的手機驗證碼登錄、郵箱密碼登錄、二維碼登錄等
2.為什么需要身份認證
身份認證的目的 是為了確認當前所聲稱為某種身份的用戶,確實是所聲稱的用戶,例如,你去找快遞員取快遞,你要怎么證明這份快遞是你的
3.不同開發模式下的身份認證
對于服務器端渲染和前后端分離這兩種開發模式來說,分別有著不同的身份認證的方案
1.服務器渲染推薦使用Session認證機制
2.前后端分離推薦使用JWT認證機制
1.HTTP協議的無狀態性
了解HTTP協議的無狀態性是進一步學習Session認證機制的必要前提
HTTP協議的無狀態性,指的是客戶端的每次HTTP請求都是獨立的,連續多個請求之間沒有直接的關系,服務器保留每次HTTP請求的狀態
2.如何突破HTTP無狀態的限制
對于超市來說,為了方便收銀員在進行結算時給VIP用戶打折,超市可以為每個VIP用戶發放會員卡注意:現實生活中的會員卡身份認證方式,在web開發中的專業術語叫做Cookie
3.什么是Cookie
Cookie是存儲在用戶瀏覽器中的一段不超過4kb的字符串 它由一個名稱(Name)、一個值(Value)和其他幾個用于控制Cookie有效期、安全性、使用范圍的可選屬性組成
不同域名下的Cookie各自獨立,每當客戶端發起請求時,會自動把當前域名下所有未過期的Cookie一同發送到服務器
Cookie的幾大特性:
1.自動發送
2.域名獨立
3.過期時限
4.4KB限制
4.Cookie在身份認證中的作用
客戶端第一次請求服務器的時候,服務器通過響應頭的形式,向客戶端發送一個身份認證的Cookie,客戶端會自動將Cookie保存在瀏覽器中
隨后,當客戶端瀏覽器每次請求服務器的時候 瀏覽器會自動將身份認證相關的Cookie 通過請求頭的形式 發送給服務器 服務器即可驗明客戶端的身份
5.Cookie不具有安全性
由于Cookie是存儲在瀏覽器中的,而且瀏覽器也提供了Cookie的API,因此Cookie很容易被偽造,不具有安全性,因此不建議服務器將重要的隱私數據,通過Cookie的形式發送給瀏覽器
注意:千萬不要使用Cookie存儲重要且隱私的數據!比如用戶的身份信息,密碼
6.提高身份認證的安全性
為了防止客戶偽造會員卡 收銀員在拿到客戶出示的會員卡之后,可以在收銀機進行刷卡認證,只有收銀機確認存在的會員卡 才能被正常使用這種“會員卡+刷卡認證”的設計理念,就是Session認證機制的精髓
7.Session的工作原理
1.安裝express-session中間件
在express項目中,只需要安裝express-session中間件,即可在項目中使用Session認證:
2.配置express-session中間件
express-session 中間件安裝成功后,需要通過app.use()來注冊session 中間件 示例代碼如下
3.向session中存數據
當express-session中間價配置成功后,即可通過req.session來訪問和使用session對象,從而存儲用戶的關鍵信息
4.從session中取數據
可以直接從req.session對象上獲取之前存儲的數據,示例代碼如下:
5.清空session
調用req.session.destroy()函數,即可清空服務器保存的session信息
三、JWT認證機制
1.了解Session認證的局限性
Session認證機制需要配合Cookie才能實現,又有Cookie默認不支持跨域訪問,所以,當涉及到前端跨域請求后端接口的時候,需要做額外的配置,才能實現跨域Session認證
注意:
1.當前端請求后端接口不存在跨域問題的時候,推薦使用Session身份認證機制
2.當前端需要跨域請求后端接口的時候 不推薦使用Session身份認證機制,推薦使用JWT認證機制
2.什么是JWT
JWT(英文全稱:JSON Web Token)是目前最流行的跨域認證解決方案
3.JWT的工作原理
4.JWT的組成部分
JWT通常由三部分組成,分別是Header(頭部)、Payload(有效荷載)、Signature(簽名)
三者之間使用英文的“.”分隔,格式如下:下面是JWT字符串的示例:
5.JWT的三個部分各自代表的含義
JWT的三個組成部分,從前到后分別是Header、Payload、Signature
其中:
Payload部分才是真正的用戶信息 它是用戶信息經過加密之后
Header和Signature是安全性相關的部分 只是為了保證Token的安全性
6.JWT的使用方式
客戶端收到服務器返回的JWT之后,通常會將它儲存在localStorage或sessionStorage中
此后,客戶端每次與服務器通信,都要帶上這個JWT的字符串,從而進行身份認證,推薦的做法是把JWT放在HTTP請求頭的Authorization字段中,格式如下:
1.安裝JWT相關的包
運行如下命令,安裝如下兩個JWT相關的包:其中:
jsonwebtoken用于生成JWT字符串
express-jwt用于將JWT字符串解析還原成JSON對象
2.導入JWT相關的包
使用require() 函數,分別導入JWT相關的兩個包:
3.定義secret密鑰
為了保證JWT字符串的安全性,防止JWT字符串在網絡傳輸過程中被別人破解,我們需要專門定義一個用于加密和解密的secret密鑰:
1.當生成JWT字符串的時候,需要使用secret密鑰對用戶的信息進行加密,最終得到加密好的JWT字符串
2.當把JWT字符串解析還原成JSON對象的時候,需要使用secret密鑰進行解密
4.在登錄成功后生成JWT字符串
調用jsonwebtoken包提供的**sign()**方法,將用戶的信息加密成JWT字符串,響應給客戶端:
5.將JWT字符串還原為JSON對象
客戶端每次在訪問那些有權限接口的時候,都需要主動通過請求頭中的Authorization字段,將Token字符串發送到服務器進行身份認證
此時,服務器可以通過express-jwt這個中間件,自動將客戶端發送過來的Token解析還原成json對象
6.使用req.user獲取用戶信息
當express-jwt這個中間件配置成功之后,即可在那些有權限的接口中,使用req.user對象,來訪問從JWT字符串中解析出來的用戶信息了,示例代碼如下:
7.捕獲解析JWT失敗后產生的錯誤
當使用express-jwt解析Token字符串時,如果客戶端發送過來的Token字符串過期或不合法,會產生一個解析失敗的錯誤,影響項目正常運行,我們可以通過Express的錯誤中間件,捕獲這個錯誤并進行相關的處理:
示例代碼如下:
token
1、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼并進行對比,判斷用戶名和密碼正確與否,并作出相應提示,在這樣的背景下,Token便應運而生。
2、Token的定義:Token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄后,服務器生成一個Token便將此Token返回給客戶端,以后客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。
3、使用Token的目的:Token的目的是為了減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。
原文鏈接:https://blog.csdn.net/faith_girl/article/details/122706429
相關推薦
- 2022-05-29 Android?超詳細深刨Activity?Result?API的使用_Android
- 2022-09-06 python實現plt?x軸坐標按1刻度顯示_python
- 2022-07-09 Harbor鏡像倉庫搭建
- 2022-10-26 c語言數據結構之棧和隊列詳解(Stack&Queue)_C 語言
- 2022-03-21 oracle中commit之后進行數據回滾的方法_oracle
- 2022-02-18 引入redis報錯Bean method ‘redisConnectionFactory‘ not
- 2024-07-15 pgsql設置主鍵自增
- 2022-07-30 find、filter、map的區別
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支