計算機網絡-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx

文章目錄

          • WebSocket
          • DNS
            • 什么是dns
            • 域名解析
            • 底層協議
          • cookie/session
          • Token/JWT
          • Nginx

WebSocket

一種網絡通信協議,允許在單個 TCP(半雙工) 連接上進行全雙工通信(客戶端和服務器可同時雙向傳輸數據)。

HTTP是基于請求-響應模式的,也就是說客戶端發送一個請求,服務器返回一個響應,然后連接就關閉了。

如果服務器想主動給客戶端發消息,比如實時更新數據,客戶端必須不斷地輪詢服務器,這會浪費資源。

WebSocket就運用于實時通信方面,比如聊天應用或者在線游戲等。

DNS
什么是dns

DNS,全稱是Domain Name System,域名系統,默認端口號53。

將易記的域名轉換為計算機可識別的IP地址的分布式數據庫系統。

域名結構如 :www.example.com.:

在域名中,越靠右的位置表示其層級越高

  • 根域名:最高層,表示為空(如.),全球僅有13組根服務器集群。
  • 頂級域:如.com, .org, .net,或國家代碼如.cn, .uk
  • 二級域:用戶注冊的域名部分(如exampleexample.com中)。
  • 子域:進一步細分(如mail.example.com)。
域名解析

各服務器負責部分(舉例:

根DNS(.)

頂級DNS(.com)

權威DNS(example.com)

  1. 用戶輸入域名www.example.com,發給本地 DNS 服務器
  2. 本地域名服務器收到請求,如果緩存里有則直接返回,無則請求其根域名服務器
  3. 根域名服務器收到請求(發現是.com),將請求發送給頂級域名服務器
  4. 頂級域名服務器收到請求(發現是www.example.com),將請求發送給權威域名服務器
  5. 權威域名服務器查詢后將對應的 IP 地址 X.X.X.X 告訴本地 DNS。
  6. 本地 DNS 再將 IP 地址返回客戶端,客戶端和目標建立連接。

在這里插入圖片描述

底層協議

DNS 基于UDP協議實現。

  • 無連接:UDP 不需要建立連接,直接發送請求,減少了通信延遲。
  • 輕量級:DNS 查詢和響應通常是小數據包,一個UDP包就能容納
  • 簡單快速: UDP相比于TCP更簡單,傳輸效率更高
cookie/session

HTTP協議是無狀態的

服務器不會記住之前的請求。所以為了跟蹤用戶的狀態,比如用戶是否登錄,就需要用到Cookie和Session。

存儲會話信息或狀態信息,服務器可以識別和跟蹤特定用戶的狀態,以提供一定程度的狀態保持功能

用戶第一次訪問網站時,服務器會創建一個Session,并生成一個唯一的Session ID,然后把這個ID通過Cookie發送給客戶端。之后,客戶端每次請求都會帶上這個Cookie,服務器通過Session ID找到對應的Session,從而識別用戶。

session

保存在服務器端的用戶狀態信息。

  1. 創建Session:用戶首次訪問時,服務器生成唯一Session ID(如abc123)。

  2. 傳遞Session ID:通過Cookie(或URL重寫:將Session ID附加到URLhttp://site.com?sid=abc123)發送給客戶端。

  3. 客戶端攜帶Session ID:后續請求包含Session ID。

  4. 服務器檢索Session:根據Session ID查找服務器存儲的會話數據。

cookie

保存在客戶端(比如瀏覽器)的小型數據片段。

  1. 服務器生成:服務器通過HTTP響應頭Set-Cookie發送Cookie到瀏覽器。

  2. 瀏覽器存儲:瀏覽器保存Cookie,后續請求自動通過Cookie請求頭發送回服務器。

  3. 服務器讀取:服務器解析Cookie內容,識別用戶狀態。

    HTTP/1.1 200 OK
    Set-Cookie: session_id=abc123; Expires=Wed, 21 Oct 2023 07:28:00 GMT; Secure; HttpOnly; SameSite=Lax
    
特性CookieSession
存儲位置客戶端(瀏覽器)服務器端
數據類型文本(鍵值對)任意結構(對象、數組等)
安全性較低(可能被篡改或竊取)較高(數據在服務器,僅傳遞Session ID)
容量限制每個域名≤4KB,總數有限(約50個)無硬性限制(受服務器資源影響)
典型用途用戶偏好、跟蹤標識登錄狀態、敏感數據(如購物車)

舉個例子:

用戶登錄流程:

  1. 用戶提交用戶名和密碼。
  2. 服務器驗證通過,創建Session(存儲用戶ID、角色)。
  3. 生成Session ID,通過Cookie發送到瀏覽器。
  4. 瀏覽器后續請求攜帶該Cookie,服務器驗證Session維持登錄狀態。
  5. 用戶退出時,服務器銷毀Session,清除客戶端Cookie。

如果客戶端禁用cookie?

則session無法正常使用。通過以下2種方式解決:

1.URL重寫:將Session ID附加到URL(http://site.com?sid=abc123)。

2.隱藏表單字段:通過HTML表單傳遞Session ID,當表單提交時,Session ID隨表單數據一起發送回服務器獲取會話狀態。

如果我把數據存儲到 localStorage,和Cookie有什么區別?

  • 存儲容量: localStorage>Cookie
  • 數據發送:Cookie自動(通過HTTP請求頭的Cookie字段),localStorage不會
  • 生命周期:Cookie設置過期時間,localStorage永久存儲(手動刪除)
  • 安全性:Cookie<localStorage

Cookie 適合用于在客戶端和服務器之間傳遞數據、跨域訪問和設置過期時間,而 LocalStorage 適合用于在同一域名下的不同頁面之間共享數據,存儲大量數據和永久存儲數據。

Token/JWT

用戶登錄成功后,服務器生成Token并返回給客戶端,客戶端保存(通常在localStorage或Cookie中),每次請求API時在Authorization頭中攜帶Token。服務器驗證Token的有效性,并據此處理請求。

1.Token通常指的是一種用于身份驗證的令牌(不同于cookie,token開發者手動添加)。當用戶登錄后,服務器生成一個Token返回給客戶端,客戶端在后續的請求中攜帶這個Token來證明自己的身份。這種方式不需要服務器保存會話信息,因此稱為無狀態(stateless)認證。

2.JWT,即JSON Web Token。JWT是一種具體的Token實現方式,它定義了一種緊湊且自包含的方式,用于在各方之間安全地傳輸信息作為JSON對象。

jwt通常由三部分組成:頭部Header、載荷Payload和簽名Signature。通過.分隔。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  1. 頭部Header

    說明Token類型及簽名算法

    {"alg": "HS256","typ": "JWT"
    }
    
  2. 載荷Payload

    包含用戶數據

    {"sub": "1234567890","name": "John Doe","admin": true,"iat": 1516239022
    }
    
  3. 簽名Signature

    也是三部分組成:通過base64編碼后的Header和Payload(以.拼接)后,再將它們通過一遍加密算法,最終得到簽名Signature.

這里可以看看我的另一篇文章Java中的jwt學習

jwt令牌解決集群部署

集群部署

將應用程序部署在多個服務器上,有多個應用服務器實例

在單服務器環境下,Session數據存儲在服務器的內存中,但當擴展到多臺服務器時,如果用戶的請求被負載均衡器分發到不同的服務器,后續請求可能到達沒有該用戶Session的服務器,導致用戶需要重新登錄

  • 需要Session共享機制,比如使用數據庫或Redis來集中存儲Session,這樣所有服務器都能訪問同一個Session存儲。
  • JWT是自包含的令牌,服務器不需要存儲會話信息,每個服務器實例都可以獨立驗證JWT的簽名,不需要查詢共享的Session存儲。

jwt令牌泄露

  • 失效令牌:當檢測到令牌失效,將該令牌標記為失效,服務器會拒絕操作失效令牌
  • 刷新令牌:主動刷新令牌,并將舊令牌標記為失效
  • 使用黑名單:將泄露的令牌加入黑名單,服務器會拒絕操作在黑名單種的令牌
Nginx

Web服務器、反向代理服務器及電子郵件代理服務器

  • Web服務器

    直接托管HTML、CSS、JS、圖片等靜態文件

    通過協議將動態請求(如PHP、Python)轉發給后端應用服務器。

  • 反向代理服務器

    將客戶端請求分發到多個后端服務器(如Tomcat、Node.js)

    支持輪詢、加權輪詢、IP哈希、最小連接數等。

nginx負載均衡算法

應用層的nginx用于將客戶端請求合理地分發到后端服務器集群。

  1. 輪詢:按服務器列表順序依次分發請求,循環往復。
  2. IP哈希:根據客戶端IP地址計算哈希值,固定將同一IP的請求分發到同一服務器。
  3. URL哈希:根據訪問的URL計算哈希值,固定將同一IP的請求分發到同一服務器。
  4. 最短響應時間:按照后端服務器的響應時間來分配請求,響應時間短的優先分配(發送到響應時間快的服務器)。
  5. 加權輪詢:根據服務器權重分配請求,權重越高處理的請求越多(適用于后端服務器性能不同的場景)。

在這里插入圖片描述
結合小林Coding不斷學習中,感謝大家的觀看>W<

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907140.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907140.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單片機如何快速實現查看實時數據

在用 Keil 做調試的時候&#xff0c;最讓人頭禿的是什么&#xff1f; 不是寫代碼的BUG&#xff0c;而是&#xff1a;這個條件變量是什么情況&#xff1f;為什么沒進入這個判斷&#xff1f;我代碼跑到哪里了&#xff1f; 其實本質上都是通過變量判斷代碼的執行順序有沒有問題 …

vue3:橫線無限滾動(向左/向右),自定義UI

子組件 <template><div class"single-scroll-container" ref"container" mouseenter"pause" mouseleave"resume"><divclass"single-scroll-content":style"{ transform: translateX(${translateX}px) }…

Anthropic公司近日發布了兩款新一代大型語言模型Claude Opus 4與Claude Sonnet 4

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【機器人】復現 Embodied-Reasoner 具身推理 | 具身任務 深度推理模型 多模態場景 長遠決策 多輪互動

Embodied-Reasoner 是一個多模態具身模型&#xff0c;它將 o1 的深度推理能力擴展到具身交互任務。 可以在 AI2THOR 仿真中執行復雜的任務&#xff0c;例如搜索隱藏物體、操縱 和 運輸物品 具有以下的功能&#xff1a; &#x1f914; 深度推理能力&#xff0c;例如分析、空間…

使用 Qemu 調試 LoongArch 應用程序

1.編譯 Qemu OS:Ubuntu 22.04 下載Qemu源碼 git clone --depth1 https://gitlab.com/qemu-project/qemu.git編譯 cd qemu mkdir build cd build ../configure --target-listloongarch64-linux-user,loongarch64-softmmu --prefixpwd/__install make && make instal…

Unity 游戲優化(持續更新中...)

垃圾回收 是什么&#xff1f; 垃圾回收&#xff08;Garbage Collection&#xff09;GC 工作機制 1、Unity 為用戶生成的代碼和腳本采用了自動內存管理。 2、小塊數據&#xff08;如值類型的局部變量&#xff09;分配在棧上。大塊數據和長期存儲分配在托管堆上。 3、垃圾收集…

python和java差異:關鍵數據類型與容器

2.0. 對象的類型&#xff1a;可變 (Mutable) 與不可變 (Immutable) 在Python中&#xff0c;理解對象的可變性 (mutability) 是至關重要的&#xff0c;它影響著變量如何被修改、函數參數如何傳遞以及數據結構的行為。 不可變對象 (Immutable Objects): 大白話定義&#xff1a;…

DAY 33

知識點回顧&#xff1a; 1. PyTorch和cuda的安裝 2. 查看顯卡信息的命令行命令&#xff08;cmd中使用&#xff09; 3. cuda的檢查 4. 簡單神經網絡的流程 a. 數據預處理&#xff08;歸一化、轉換成張量&#xff09; b. 模型的定義 i. 繼承nn.Module類 ii. 定義…

Minktec 柔性彎曲傳感器,靈敏捕捉坐姿弓背、精準監測行走姿態,守護兒童背部健康,為科學健身提供數據支撐,開啟職業健康與背痛 AI 干預新方向。

Minktec彎曲形變傳感器通過創新的技術設計&#xff0c;為各種彎曲和形變檢測需求提供了精確的解決方案。其核心技術基于薄膜柔性傳感器的應用&#xff0c;能夠捕捉物體在三維空間中的動態變化。傳感器內部結合了多點排列的應變元件和專有算法&#xff0c;實現了形狀的實時重建。…

快遞鳥接口費用解析:中小電商成本控制方案

中小電商企業在物流環節的成本控制&#xff0c;直接影響著整體運營效率和利潤空間。作為國內主流的物流數據服務商&#xff0c;快遞鳥API接口憑借其聚合查詢、電子面單、軌跡跟蹤等功能&#xff0c;成為眾多電商企業的選擇。但如何精準解析其收費模式&#xff0c;并制定科學的成…

maven 最短路徑依賴優先

問題描述&#xff1a; 項目在升級大版本后出現了&#xff0c;兩個不同模塊所引用的同一個依賴包版本不同 module A 引用了 module B&#xff0c;module B 引用了 A_1.0.jar->B_1.0.jar->C_1.0.jar(C 為B 里面的包) 在執行 mvn dependency:tree 后發現&#xff1a; modul…

游戲引擎學習第314天:將精靈拆分成多個層

回顧并為今天的工作做準備 我們今天繼續昨天開始的工作&#xff0c;現在我們要回到渲染中處理 Z 值的最終環節。我們目前已經有一個我們認為還算合理的排序方式&#xff0c;雖然可能還需要在接下來的過程中進行一些調整&#xff0c;但總體上已經有了一個明確的方向。 我們已經…

HashSet的基本概念

ashSet的基本概念 - HashSet 是C#中用于存儲唯一元素的泛型集合類&#xff0c;它基于哈希表實現&#xff0c;具有快速查找、添加和刪除元素的特性。 - 核心特點&#xff1a; - 不允許存儲重復元素 - 元素無序排列 - 查找、添加、刪除操作的平均時間復雜度為O(1) - 實現了 IEnum…

信號與系統10-綜合案例:智能信號處理系統

第7課&#xff1a;綜合案例——智能信號處理系統 1. 案例1&#xff1a;基于傅里葉變換與AI的語音信號分類系統 1.1 理論基礎 傅里葉變換是信號處理的核心工具之一&#xff0c;能夠將時域信號轉換為頻域表示&#xff08;如頻譜圖&#xff09;。語音信號的頻域特征&#xff08…

詳解Kubernetes Scheduler 的調度策略

詳解Kubernetes Scheduler 的調度策略 在 Kubernetes(K8s)中,Scheduler(調度器) 負責 決定 Pod 應該運行在哪個 Node(節點)。 ?? 調度器的目標是什么? ? 最大化資源利用率(讓 CPU、內存等資源不浪費) ? 保證 Pod 運行在合適的 Node 上(避免超載、滿足親和性)…

在 ElementUI 中實現 Table 單元格合并

在 ElementUI 中實現 Table 單元格合并 在使用 ElementUI 的 Table 組件時&#xff0c;有時我們需要合并相鄰的單元格&#xff0c;以提高表格的可讀性和簡潔性。下面是一個關于如何在 Table 中根據特定字段合并單元格的實現方法。 邏輯分析 spanMethod 方法&#xff1a;這是 …

小土堆pytorch--現有網絡模型的使用及修改

現有網絡模型的使用及修改 一級目錄二級目錄三級目錄 現有網絡模型的使用及修改1.VGG16模型VGG16網絡模型簡介**核心特點****網絡結構細節****優缺點與應用****變種與后續發展** 2. 使用vgg16模型 一級目錄 二級目錄 三級目錄 現有網絡模型的使用及修改 1.VGG16模型 VGG16…

Oracle 正則表達式匹配(Oracle 11g)

1、連續2詞漢字重復或3詞漢字重復&#xff08;不會忽略符號&#xff09; ([^ \u4e00-\u9fa5\S]{2,3})\1 例如&#xff1a;阿富、 SELECT REGEXP_replace(阿富、阿富、 阿富汗、 , ([^ \u4e00-\u9fa5\S]{2,3})\1, 重復) FROM dual結果&#xff1a; 2、連續2詞漢字重復或3詞…

對話魔數智擎CEO柴磊:昇騰AI賦能,大小模型融合開啟金融風控新范式

導讀&#xff1a;#昇騰逐夢人# AI已經成為金融機構核心競爭力的關鍵要素。專注AI金融賽道的魔數智擎&#xff0c;通過大小模型融合&#xff0c;讓AI成為銀行的“金融風控專家”。 作者 | 小葳 圖片來源 | 攝圖 在AI涌向產業的時代賽跑中&#xff0c;開發者是絕對的主角。 昇騰…

IDEA使用Git進行commit提交到本地git空間后撤回到commit版本之前

一、前言 Git作為最流行和最全面的版本控制工具&#xff0c;非常好用&#xff0c;但是操作也會比SVN復雜一些。畢竟有得有失嘛&#xff0c;所以我選擇Git&#xff0c;最近在工作中&#xff0c;一不小心吧一些無關緊要的文件commit了。還好在Push之前看到&#xff0c;不過就算P…