前端 計算機基礎篇 ( 二 )

文章目錄

    • websockt及原理
    • ipv4和ipv6的區別
    • 線程和進程的區別
    • cdn原理
    • 緩存所涉及的http狀態碼
    • 緩存的時候設置 no-store和no-cache和max-age=0這幾個有什么區別
    • token一般存放在哪兒
    • 怎么設置強緩存和協商緩存
      • 強緩存:
        • 1. 使用 Cache-Control 頭字段:
      • 協商緩存:
        • 1. 使用 Last-Modified 和 ETag 頭字段:
        • 2. 在響應中返回 304 Not Modified:
    • http每次都要建立一個連接嗎?
    • tcp連接的三次握手和四次揮手
      • 三次握手(Establishing a Connection):
      • 四次揮手(Terminating a Connection):

websockt及原理

WebSocket 是一種單個 TCP 連接上進行全雙工通信的協議,它允許在客戶端和服務器之間進行實時數據傳輸。與傳統的 HTTP 請求-響應模型不同,WebSocket 提供了持久性連接,允許雙方在任何時候向對方發送數據而無需等待請求。

握手過程: WebSocket 的連接始于一個握手過程,該過程通過 HTTP 協議完成。客戶端發送一個 WebSocket 握手請求到服務器,請求中包含了一些特定的頭部信息,如 Upgrade: websocket 和 Connection: Upgrade。如果服務器支持 WebSocket,它將響應一個包含同樣頭部的握手確認,然后連接升級為 WebSocket。

持久連接: 一旦握手成功,WebSocket 連接就建立起來了,而且是持久性的。這意味著客戶端和服務器之間的連接將一直保持打開狀態,直到其中一方選擇關閉連接

數據幀WebSocket 數據以數據幀的形式傳輸。數據幀可以是文本、二進制數據,或者其他自定義數據類型。這些數據幀通過 WebSocket 連接在客戶端和服務器之間傳遞。

全雙工通信: WebSocket 支持全雙工通信,這意味著客戶端和服務器都可以同時向對方發送數據,而不需要等待對方的響應。這在實時應用中非常有用,如聊天應用、實時游戲等。

心跳機制: 為了保持連接的活躍狀態,通常會實現心跳機制。通過定期發送小的數據幀或 ping 消息,可以檢測連接是否仍然可用

創建websocket請求

var socket = new WebSocket("ws://example.com/socket");

監聽 WebSocket 的不同事件,以處理連接狀態和接收數據。

// 監聽連接建立事件
socket.addEventListener("open", function (event) {console.log("WebSocket 連接已建立");
});// 監聽接收到消息事件
socket.addEventListener("message", function (event) {console.log("收到消息:" + event.data);
});// 監聽連接關閉事件
socket.addEventListener("close", function (event) {console.log("WebSocket 連接已關閉");
});// 監聽發生錯誤事件
socket.addEventListener("error", function (event) {console.error("WebSocket 錯誤發生:" + event);
});

主動發送數據

// 發送文本消息
socket.send("Hello, WebSocket!");// 發送 JSON 數據
var data = { message: "Hello, WebSocket!", user: "user123" };
socket.send(JSON.stringify(data));

主動關閉socket連接

// 關閉連接
socket.close();

ipv4和ipv6的區別

IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)是互聯網協議的兩個不同版本,用于標識和定位網絡上的設備。

地址長度:
IPv4: 使用32位地址,通常表示為四個點分十進制數,如 192.168.0.1。每個部分取值范圍是255, IPv4地址空間有限,約為42億個地址(255255255*255)。

IPv6: 使用128位地址,通常表示為八組四位十六進制數,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6大大擴展了地址空間,提供了3.4 x 10^38個地址

安全性:
IPv6: 在設計時考慮了更多的安全特性,例如IPsec(Internet Protocol Security)在IPv6中是可選但更常見的部分,而在IPv4中是可選的。
IPv4: 安全性方面相對較弱,對于安全性需求通常需要添加額外的協議和功能。

網絡層協議支持:
IPv4: 支持的網絡層協議有IP、ICMP、IGMP等。
IPv6: 支持更多網絡層協議 除了支持IPv4的協議外,還集成了IPsec,并在鄰居發現中包含了Multicast Listener Discovery(MLD)等新的特性。

線程和進程的區別

進程: 進程是程序的執行實例,是操作系統分配資源的基本單位。一個進程可以包含多個線程。
線程: 線程是進程內的執行單元,是操作系統調度的基本單位。一個進程內的所有線程共享相同的資源和上下文。

獨立性:
進程: 進程之間相對獨立,一個進程的崩潰通常不會影響其他進程。
線程: 線程之間共享相同的資源,一個線程的錯誤可能會影響整個進程,但通過適當的同步和錯誤處理機制可以降低這種風險。

通信方式
進程: 進程間通信需要采用額外的機制(IPC),如消息傳遞、管道、共享內存等。
線程: 線程之間可以直接共享數據,通信更為簡便。

cdn原理

CDN(Content Delivery Network)是一種網絡架構,旨在通過在全球范圍內的多個服務器上分發內容,提高用戶對網站資源的訪問速度和性能。

輻射式部署CDN 提供商在全球范圍內部署了多個輻射點(Point of Presence,PoP)。每個 PoP 都包含有緩存服務器,這些服務器存儲了網站的靜態內容,如圖像、樣式表、腳本等。

DNS 解析: 用戶在瀏覽器中輸入網址并請求特定資源時,首先進行 DNS 解析。如果網站啟用了 CDN,DNS 解析會返回距離用戶最近的 CDN 輻射點的 IP 地址

請求重定向: 用戶的請求經過本地 CDN 輻射點后,CDN 輻射點會檢查請求的資源是否已經緩存在本地。如果有,CDN 直接返回緩存的資源;如果沒有,CDN 會根據一系列的負載均衡和緩存算法,將請求轉發到全球其他的 CDN 輻射點或源服務器上

內容緩存CDN 輻射點會在其服務器上緩存靜態內容,通常是經過壓縮和優化的版本。這樣,當其他用戶請求相同的資源時,CDN 輻射點可以直接返回緩存的內容,而無需再次訪問源服務器。

負載均衡: CDN 提供商會使用負載均衡技術,確保用戶請求被分發到最合適的 CDN 輻射點。這可以基于地理位置、服務器負載、網絡拓撲等因素來進行動態調整。

動態內容加速: 除了靜態內容,一些高級 CDN 提供商還提供動態內容加速。這通過緩存和優化動態生成的內容,減輕源服務器的負擔。

安全性: CDN 也可以提供一些安全性措施,如 DDoS 攻擊防護SSL 加密等,以確保用戶和網站的數據安全。

緩存所涉及的http狀態碼

200 OK: 表示請求成功。當服務器返回 200 狀態碼時,可能會包含有關資源是否已被修改的信息,以確定是否使用緩存。

304 Not Modified: 表示資源未被修改,客戶端可以使用緩存。當客戶端發起條件請求(通常是帶有 If-Modified-Since 或 If-None-Match 頭部的 GET 請求),而服務器判斷資源未被修改時,返回 304 狀態碼,告訴客戶端可以使用緩存的版本。

410 Gone: 表示請求的資源不再可用。410 明確表示資源已被永久刪除。如果客戶端先前緩存了該資源,可能需要清除緩存。

緩存的時候設置 no-store和no-cache和max-age=0這幾個有什么區別

這三個HTTP頭字段涉及到瀏覽器緩存和服務器的緩存控制,它們有一些區別:

  1. no-store:

    • no-store 是一個緩存控制指令,表示不應該緩存任何與請求/響應有關的內容。
    • 它指示客戶端不應該將請求/響應的任何部分存儲在緩存中,包括不存儲請求的副本和不存儲響應的副本。
  2. no-cache:

    • no-cache 是一個緩存控制指令,表示緩存需要重新驗證。
    • 它指示客戶端在使用緩存之前必須先驗證緩存的有效性,即發送請求到服務器進行檢查,但不一定需要下載整個響應。
  3. max-age=0:

    • max-age 是一個緩存控制指令,表示資源在緩存中的最大存儲時間,單位是秒。
    • max-age=0 表示資源已經過期,客戶端必須將請求發送到服務器進行驗證,以確保緩存的內容仍然有效。實際上,這等效于 no-cache 指令。

總結區別:

  • no-store 表示完全禁止緩存,不存儲任何內容。
  • no-cache 表示需要重新驗證緩存,客戶端需要發送請求到服務器進行檢查。
  • max-age=0 也表示需要重新驗證緩存,相當于 no-cache,因為 max-age=0 意味著資源已經過期。

token一般存放在哪兒

token可以存在在cookie或者local storage,但一般存在local storage

為什么不存儲在 Cookie 中的一些考慮:

CSRF 攻擊: Cookies 在每個請求中都會被自動發送到服務器,因此如果 Token 存儲在 Cookie 中,那么攻擊者可能通過構造惡意網站來利用用戶的身份進行惡意請求,即 CSRF 攻擊。

安全性和隱私: Cookies 通常會被瀏覽器自動管理,而 Local Storage 則由 JavaScript 控制。從安全性和隱私的角度來看,開發人員可能更喜歡使用 Local Storage,以便更精確地控制 Token 的存儲和獲取。

強緩存和協商緩存分別是什么,請求的過程是怎樣的
客戶端首次請求資源時服務器會在響應頭中添加 Last-Modified 字段,表示資源的最后修改時間。當客戶端再次請求資源時,可以在請求頭中包含 If-Modified-Since 字段其值為上次收到的 Last-Modified 的值

服務器發現請求中的 If-Modified-Since 的值與服務器上資源的最后修改時間相同,說明客戶端的資源仍然是最新的,服務器會返回 304 Not Modified,并告訴客戶端可以使用緩存。

當服務器返回資源時,也可以在響應頭中添加 ETag 字段,表示資源的唯一標識符。客戶端再次請求資源時,可以在請求頭中包含 If-None-Match 字段,其值為上次收到的 ETag 的值。

如果服務器發現請求中的 If-None-Match 的值與服務器上資源的 ETag 相同,說明客戶端的資源仍然是最新的,服務器會返回 304 Not Modified,并告訴客戶端可以使用緩存。

怎么設置強緩存和協商緩存

在服務器端設置強緩存或協商緩存可以通過在 HTTP 響應頭中添加相應的字段來實現。以下是設置強緩存和協商緩存的常用響應頭字段:

強緩存:

1. 使用 Cache-Control 頭字段:
  • max-age: 設置資源的最大緩存時間,單位是秒。

    Cache-Control: max-age=3600
    
  • s-maxage: 用于代理服務器,設置共享緩存的最大時間。

    Cache-Control: s-maxage=3600
    
  • public: 表示資源可以被任何緩存(包括代理服務器)緩存。

    Cache-Control: public, max-age=3600
    
  • private: 表示資源僅可被瀏覽器緩存。

    Cache-Control: private, max-age=3600
    
  • no-cache: 表示瀏覽器每次請求都要向服務器驗證資源是否過期。

    Cache-Control: no-cache
    

協商緩存:

1. 使用 Last-Modified 和 ETag 頭字段:
  • Last-Modified: 表示資源的最后修改時間。

    Last-Modified: Tue, 23 Nov 2023 12:00:00 GMT
    
  • ETag: 表示資源的唯一標識符。

    ETag: "686897696a7c876b7e"
    
2. 在響應中返回 304 Not Modified:

當客戶端發起請求時,服務器通過比較請求頭中的 If-Modified-SinceIf-None-Match 字段與資源的修改時間或標識來判斷是否需要返回新的資源。如果沒有變化,服務器可以直接返回 304 Not Modified,告訴客戶端可以使用緩存。

HTTP/1.1 304 Not Modified
Date: Tue, 23 Nov 2023 12:00:00 GMT

通過這些設置,服務器可以控制瀏覽器緩存行為,實現強緩存和協商緩存。請注意,在實際應用中,可以根據具體的業務需求選擇適當的緩存策略。

http每次都要建立一個連接嗎?

HTTP/1.1 中,默認情況下是可以復用連接的,即通過持久連接(Persistent Connection)的方式。這意味著在單個 TCP 連接上,可以傳輸多個 HTTP 請求和響應,而不必為每個請求都重新建立一個連接。

tcp連接的三次握手和四次揮手

TCP(Transmission Control Protocol)是一種面向連接的協議,它使用三次握手和四次揮手來建立和終止連接。

TCP(Transmission Control Protocol)是一種面向連接的協議,它使用三次握手和四次揮手來建立和終止連接。

三次握手(Establishing a Connection):

  1. 客戶端發送 SYN(同步)報文:

    • 客戶端向服務器發送一個 TCP 報文,標志位 SYN 置為 1,表示請求建立連接,并選擇一個初始的序列號(ISN)。
  2. 服務器發送 SYN + ACK 報文:

    • 服務器收到客戶端的 SYN 請求后,如果同意建立連接,會向客戶端發送一個 TCP 報文,其中 SYN 置為 1,同時 ACK(確認)標志也置為 1,表示確認收到客戶端的請求,并選擇自己的初始序列號。
  3. 客戶端發送 ACK 報文:

    • 客戶端收到服務器的 SYN + ACK 報文后,會向服務器發送一個 ACK 報文,確認服務器的建立連接請求。

此時,連接建立完成,可以開始進行數據傳輸。

四次揮手(Terminating a Connection):

  1. 客戶端發送 FIN 報文:

    • 客戶端希望關閉連接時,會向服務器發送一個 FIN(結束)報文,表示不再發送數據。
  2. 服務器發送 ACK 報文:

    • 服務器收到客戶端的 FIN 報文后,發送一個 ACK 報文,確認收到客戶端的關閉請求。此時服務器進入 CLOSE-WAIT 狀態,表示可以關閉連接,但還需要等待可能未發送完的數據。
  3. 服務器發送 FIN 報文:

    • 服務器確認可以關閉連接后,發送一個 FIN 報文給客戶端,表示服務器也不再發送數據了。
  4. 客戶端發送 ACK 報文:

    • 客戶端收到服務器的 FIN 報文后,發送一個 ACK 報文,確認收到服務器的關閉請求。

此時,連接終止。客戶端和服務器都進入 CLOSED 狀態。

需要注意的是,四次揮手中的 ACK 報文通常和 FIN 報文合并在一個報文中發送,因此可能看起來只有三次數據包交換。

在這里插入圖片描述

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

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

相關文章

C++復制構造函數中的對象形參只能是引用的形式

這是一個簡單的復制構造函數的應用&#xff1a; #include <bits/stdc.h> using namespace std;class A { public:A() {cout << "創建對象&#xff08;默認構造函數&#xff09;\n";}A(A & a) { // 最好是&#xff1a;const A & acout << …

C語言打字游戲案例

#include <stdio.h> #include <stdlib.h> #include <time.h>int main() {// 設置隨機數種子srand((unsigned int)time(NULL));char c[201] { 0 }; // 加上一個 \0結束符位置// 產生隨機數for (int i 0; i < 20; i){c[i] rand() % 26 a;}printf("…

Flutter和Android的混合跳轉

1、項目特點 項目是Flutter作為主工程&#xff0c;將Android module或SDK作為模塊嵌入到flutter中&#xff0c;與通常所熟悉的Android&#xff08;或iOS&#xff09;工程將flutter 為module嵌入到工程中有所不同。 2、業務需求 任意界面間的跳轉&#xff0c;不管是flutter頁…

工作中死循環害死人

背景&#xff1a;研發的一段代碼&#xff0c;循環一直沒有跳出&#xff0c;導致其他依賴邏輯有問題&#xff0c;生產事故導致9萬左右數據不正常。 這里while&#xff08;true&#xff09;真的不要輕易用 &#xff0c;后來研發改動限制mysql的id切分步長&#xff0c;控制不會有數…

去大連發展還是去蘇州

公司要搬到蘇州&#xff0c;你是跟隨公司去蘇州發展&#xff0c;還是留在大連另尋出路&#xff1f;

【RtpRtcp】1: webrtc m79:audio的ChannelReceive 創建并使用

m79中,RtpRtcp::Create 的調用很少 不知道誰負責創建ChannelReceiveclass ChannelReceive : public ChannelReceiveInterface,public MediaTransportAudioSinkInterface {接收編碼后的音頻幀:接收rtcp包:

linux端無法magic上網,該怎么處理

可以打開網址&#xff1a;登錄 — iKuuu VPN 不用重新安裝&#xff0c;再次配置一下即可。

深入了解前饋網絡、CNN、RNN 和 Hugging Face 的 Transformer 技術!

一、說明 本篇在此對自然語言模型做一個簡短總結&#xff0c;從CNN\RNN\變形金剛&#xff0c;和抱臉的變形金剛庫說起。 二、基本前饋神經網絡&#xff1a; 讓我們分解一個基本的前饋神經網絡&#xff0c;也稱為多層感知器&#xff08;MLP&#xff09;。此代碼示例將&#xff1…

Web應用系統的小安全漏洞及相應的攻擊方式

1 寫作目的 本文講述一個簡單的利用WebAPI來進行一次基本沒有破壞力的“黑客”行為。 主要目的如下&#xff1a; 了解什么叫安全漏洞知道什么是api了解一些獲取api的工具通過對API的認識了解白盒接口測試基本概念和技術 免責聲明&#xff1a; 本文主要是以學習交流為目的…

C++ ,VCPKG那些事

玩過C都知道&#xff0c;熟悉三方庫對開發工作的重要性&#xff0c;尋找同步更新、穩定、權威的庫源更是每一位開發者經常要做的功課&#xff0c;諸如赫赫有名的boost,google SDK、騰迅sdk、阿里庫&#xff0c;vcpkg等等&#xff0c;這里要說的就是VCPKG&#xff0c;以下是記錄…

盤點63個Python登錄第三方源碼Python愛好者不容錯過

盤點63個Python登錄第三方源碼Python愛好者不容錯過 學習知識費力氣&#xff0c;收集整理更不易。 知識付費甚歡喜&#xff0c;為咱碼農謀福利。 鏈接&#xff1a;https://pan.baidu.com/s/1l7oooH9YovHmWzQ_58FRdg?pwd8888 提取碼&#xff1a;8888 項目名稱 A headless…

11-23 SSM4

Ajax 同步請求 &#xff1a;全局刷新的方式 -> synchronous請求 客戶端發一個請求&#xff0c;服務器響應之后你客戶端才能繼續后續操作&#xff0c;請求二響應完之后才能發送后續的請求&#xff0c;依次類推 有點&#xff1a;服務器負載較小&#xff0c;但是由于服務器相應…

Vue3+Ts實現聊天機器人(chatBot-附代碼)

一&#xff1a;項目介紹 本次實驗主要涉及到的技術是 Vue3 Ts&#xff0c;當然其中也有部分是 Vue2 格式的代碼以及 json 和 CSS 布局等。本來是想仿照 文心一言 來開發的一個聊天機器人案例。結果由于時間不足&#xff0c;可能只是做出來了一個半成品。不過核心功能是有的。由…

淺談安科瑞智能照明系統在馬來西亞國家石油公司項目的應用

摘要&#xff1a;隨著社會經濟的發展及網絡技術、通信技術的提高&#xff0c;人們對照明設計提出了新的要求&#xff0c;它不僅要控制照明光源的發光時間、 亮度&#xff0c;而且與其它系統來配合不同的應用場合做出相應的燈光場景。本文介紹了馬亞西亞石油公司智能照明項目的應…

tp8 使用rabbitMQ(2)工作隊列

代碼的參數說明在 第一小節的代碼中&#xff0c;如果需要可移步到第一節中查看 工作隊列 工作隊列&#xff08;又稱&#xff1a;任務隊列——Task Queues&#xff09;是為了避免等待一些占用大量資源、時間的操作。當我們把任務&#xff08;Task&#xff09;當作消息發送到隊列…

推薦一款png圖片打包plist工具pngPackerGUI_V2.0

png圖片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此軟件是在pngpacker_V1.1軟件基礎之后&#xff0c;開發的界面化操作軟件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下載并解壓縮軟件&#xff0c;得到如下目錄&#xff0c;雙擊打開 pngPackerGUI.…

《第一行代碼:Android》第三版-2.4.3循環語句 for循環

本節主要講for 循環&#xff0c;主要就是創建個區間&#xff0c;然后用for 來遍歷。 /*** You can edit, run, and share this code.* play.kotlinlang.org*/fun main() {println("Hello, world!!!")for(i in 1..10)//表示 0 到10 但是包括10 &#xff0c;即數學上的…

使用paddleocr進行OCR文字識別

1 OCR介紹 OCR&#xff08;Optical Character Recognition&#xff09;即光學字符識別&#xff0c;是一種將不同類型的文檔&#xff08;如掃描的紙質文件、PDF文件或圖像文件中的文本&#xff09;轉換成可編輯和可搜索的數據的技術。OCR技術能夠識別和轉換印刷或手寫文字&…

Python接口自動化測試——如何搭建測試環境

前言 接口測試的方式有很多&#xff0c;比如可以用工具&#xff08;jmeter,postman&#xff09;之類&#xff0c;也可以自己寫代碼進行接口測試&#xff0c;工具的使用相對來說都比較簡單&#xff0c;重點是要搞清楚項目接口的協議是什么&#xff0c;然后有針對性的進行選擇&a…

NF是哪個國家品牌?韓國NF-耐福功放芯片介紹

NF是韓國一家專注于數字音頻芯片領域公司旗下的數字功放IC品牌&#xff0c;2008年開始進入中國市場&#xff0c;ISweek工采網作為其代理商&#xff1b;在國內簡稱&#xff1a;韓國NF&#xff0c;又被稱耐福、耐福NTP功放芯片&#xff1b;國內長虹、TCL、海信、小豹AI音箱、騰訊…