HTTP / HTTPS 協議

目錄

一、前言:

二、Fiddler 抓包工具:

三、http 協議:

1、http 請求:

1.(1)請求行:

1、(2)? 請求頭:

1、(3)? 請求正文:

2、http 響應:

2、(1)? 狀態碼:

2、(2)??響應頭:

2、(3)? 響應正文:?

四、請求行 GET 和 POST 方法的區別:

五、 https 協議:

1、https 工作過程:

1、(1)對稱加密:

1、(2)非對稱加密:

1、(3)中間人攻擊:

1、(4)通過證書解決“中間人”攻擊:


一、前言:

? ? ? ? http 和 https 協議是在應用層的協議,而 https 協議是在?http 協議基礎上加了一個加密解密的工作。

? ? ? ? 在此之前,要先了解 http 的協議格式,http 協議分為請求格式響應格式

二、Fiddler 抓包工具:

? ? ? ? 當前網絡環境中,純使用 http 協議的網站很少,更多都是 https 協議的,那么,由于 https 是應用層的協議,一般是查看不了的,怎么才能查看?

? ? ? ? 使用 fiddler 抓包工具,就能從當前計算機的網卡獲取到經過的網絡數據包,相當于一個 “門衛”,所有的網絡數據包想要通過(發送和接收)數據包都要經過這個“門衛”。前面說到,當前網絡環境中,純使用 http 協議的網站很少,更多都是 https 協議,所以安裝 fiddler 時要安裝它的證書才能查看 https 具體內容。

? ? ? ? 下面就是一次抓包的請求和響應結果:

????????

? ? ? ? ?瀏覽器網址欄輸入“bing”進入必應搜索引擎,fiddler 抓到了其中一條左邊紅色圈起來的信息,是當前一次發送的請求和響應。右邊的上面綠色圈起來的是一次請求,右邊下面藍色圈起來的是當前請求的響應結果。

????????點擊 “Raw”,就能顯示 http 的原始數據點擊 “View in Notepad” 就能把當前的數據以行文本像形式顯現。

三、http 協議:

通過上面的 fiddler 抓包,可以知道,http 協議分為四大部分:

1、http 請求:

? ? ? ? 請求行,請求頭(header),空行,請求正文(body)。

例如:????????

不同顏色圈起來的四個部分,從上到下分別代表,請求行,請求頭,空行,請求正文。

????????其中,空行是請求頭結束的標記。

1.(1)請求行:

請求行由三個部分組成,即:

? ? ? ? 方法 + URL + 版本。

方法

表示客戶端的請求類型:

? ? ? ? 其中,GET和POST方法較為常見,但?GET 方法是最常用的 http 方法,常用于獲取服務器的某個資源,比如在地址欄輸入網址,或者在一些頁面點擊鏈接跳轉的時候,大部分都是涉及 GET 方法。

? ? ? ? 值得注意的是,GET 方法一般是沒有請求正文的。(除非開發寫代碼的時候故意構造 body 也可以)。所以,GET 想要給服務器傳遞數據的時候,往往就是通過 URL 的 路徑 / query string 來進行傳遞了。

? ? ? ? 另外,POST方法在下面的場景會用到:

????????比如在某個網站登陸的時候,輸入的用戶名和密碼,其中的請求正文(body)就包含了用戶輸入的用戶名和密碼;或者上傳圖片資源 / 文件的時候,body 里上傳的文件的二進制數據有時候會通過 base64 編碼,變成文本內容,這是為了讓服務器好處理。

???????? 值得注意的是,POST方法是帶有 body 的,通過 body 給服務器傳遞數據。

URL

????????URL 就是我們平時在地址欄輸入的內容(俗稱網址),它表示唯一資源定位符,描述了網絡上的某個資源的具體位置。互聯網上的每個文件都有一個唯一的 URL 。在一些情況下,我們在地址欄輸入的內容可能并不是完整的 URL。比如,當我們只輸入一個域名 “?baidu.com?” 時,瀏覽器會自動補全協議部分,通常默認使用 “https://”,然后形成完整的 URL 進行訪問。

? ? ? ? 完整的 URL 包含的部分:????????

?協議方案名:

? ? ? ? 比如 http 和 https

登錄信息(認證):

????????由于現在的網站進行身份驗證一般都不再通過 URL 進行了,一般都會省略。

服務器地址:

? ? ? ? 此處是一個 “域名”,域名會通過 DNS 系統解析成一個具體的 IP 地址。?

服務器端口號:

? ? ? ? 上面的 URL 中的端口號被省略了,當端口號省略的時候,瀏覽器會根據協議類型自動決定使用哪個端口,例如 http 協議默認使用 80 端口,https 協議默認使用 443 端口。

帶層次的文件路徑:

????????指定服務器上資源的具體位置,以?/?分隔不同的目錄和文件名。比如,你訪問一個電商網站,最初進入的是首頁,其 URL 可能是https://www.example.com/,這是網站的根目錄級別。當你點擊進入某個商品分類頁面,如https://www.example.com/category/electronics/,這里的category/electronics/就比首頁的路徑多了一個層級,它表示electronicscategory文件夾下的一個子文件夾,用于存放電子產品分類相關的文件或頁面信息。如果你再點擊進入某個具體的商品詳情頁,如https://www.example.com/category/electronics/product123.html,路徑又多了一個層級,product123.html表示具體的商品頁面文件,它在electronics子文件夾下,通過這種層層嵌套的路徑結構,網站能夠準確地定位和展示不同的頁面和資源,讓用戶可以按照一定的邏輯瀏覽網站內容。

查詢字符串(query string):

? ? ? ? 用于向服務器傳遞額外的參數信息,本質就是一個鍵值對的結構,通常以 ?開頭,鍵值對之間用 & 分隔,鍵與值之間用 = 分割。

? ? ? ? 比如,我在瀏覽器輸入 “hello”:????????

? ? ? ? 得到的 URL :

https://cn.bing.com/search?q=hello&qs=n&form=QBRE&sp=-1&lq=0&pq=hello&sc=12-5&sk=&cvid=F469659E942240769939E00F71E6A946

? ? ? ? 其中的 q = hello 就是用于向服務器傳遞其中的一個額外參數信息,參數名(q,qs,form......)一般由開發程序員自定義。

片段標識符:

? ? ? ? 標識網頁的某個部分,實現“頁面內跳轉”功能,一般文檔類的網站會有這個。

值得注意的是:

? ? ? ? 上述的 URL 這么多的部分,我們要重點關注?服務器地址 , 服務器端口,帶層次的文件路徑,查詢字符串。

? ? ? ? 并且,URL 中只能包含特定的字符集合,包括字母、數字、一些特殊符號(如?-_.~)以及保留字符(如?:/?#?等)。當 URL 中包含其他非 ASCII 字符或特殊字符(比如中文)時,就需要進行轉義(一般使用utf - 8),以確保這些字符能在網絡中正確傳輸和被服務器正確解析,避免出現歧義或錯誤。

? ? ? ? 例如我在搜索引擎輸入 “你好,世界”,在 UTF-8 編碼下,“你” 的十六進制編碼是?E4 BD A0,“好” 是?E5 A5 BD,“,” 是?EF BC 8C,“世” 是?E4 B8 96,“界” 是?E7 95 8C?。再發送 http 請求的時候,query string的會有一部分是 q =?%E4%BD%A0%E5%A5%BD%EF%BC%8C%E4%B8%96%E7%95%8C?。

版本

? ? ?表示協議的版本。最廣泛使用的版本是 HTTP /1.1??

1、(2)? 請求頭:

? ? ? ? ?每一行都是一個鍵值對,鍵與值之間用 “: ” 來分隔。由于 header 的 鍵(key)太多了,下面講解一些比較重要的。

Host描述了訪問的服務器的 IP(域名) 和 端口號
Content-Length描述了 body 的長度
Content-Type描述了 body 的數據格式
User-Agent標識客戶端的類型和版本信息(如瀏覽器、操作系統),服務器可據此返回適配內容。
Referer通過這個字段,服務器可以知道用戶是從哪個頁面鏈接過來的
Cookie本質是瀏覽器在本地存儲數據的一種機制

Host:

? ? ? ? 與 URL 里的服務器地址端口作校驗。因為針對 https 來說,https 是會把 header 部分加密的。

Content-Length 和?Content-Type:

? ? ? ? 請求 / 響應 中存在 body 才會有這兩個屬性。

????????Content-Length可以解決粘包問題,在 TCP 緩沖區中,會有多個 https 的請求,如果有 body ,則 header 必然會有 Content-Length,從 body 開始的位置開始讀取Content-Length個字節就可以了

????????Content-Type 其中一種常見的格式比如 JSON ,服務器可以根據?Content-Type 決定 body 如何使用。

Referer:

? ? ? ? 不是所有的請求頭都有這個字段(比如瀏覽器直接輸入目的網址訪問),例如,用戶在百度上搜索某個關鍵詞,然后點擊搜索結果中的鏈接進入了我的網站,我的網站服務器就可以通過?Referer?字段獲取到百度的搜索頁面 URL,從而了解到用戶是通過百度搜索進入的。

Cookie:

????????由服務器生成并發送到瀏覽器保存,通常包含鍵值對形式的數據(如user_id=12345),當瀏覽器每次訪問相同域名的網頁時,會自動攜帶對應的Cookie發送給服務器。所以為什么在一些網站登錄一次后,下次登錄不用重新輸入用戶名和密碼。

1、(3)? 請求正文:

????????請求正文(Body)的格式由請求頭的 Content-Type 字段決定,下面是?JSON 格式的例子

{"key" : "value"............
}

????????

2、http 響應:

? ? ? ? 狀態行,響應頭(header),空行,響應正文(body)。

例如:????????

不同顏色圈起來的四個部分,從上到下分別代表,狀態碼,響應頭,空行,響應正文。

????????其中,空行是響應頭結束的標記。

2、(1)? 狀態碼:

????????

以上紅色圈起來的部分是要重要了解的狀態碼。

200:

?????狀態碼 200 代表 “OK”,??表示服務器成功處理了客戶端的請求。?

301:

? ? ? ? 永久重定向,當服務器接收到客戶端的請求,發現請求的資源已經永久性地遷移到了另一個地址時,服務器會返回 301 狀態碼,并在響應頭的?Location字段中指定新的 URL。客戶端收到這個響應后,會自動使用Location字段中的 URL 再次發起請求。簡單理解就是服務器告訴客戶端:“你要找的資源已永久搬家,以后請直接訪問新地址!”(后續的請求都會被自動改成新的地址)。

302:

? ? ? ? 臨時重定向,表明請求的資源只是臨時位于新的 URL,服務器收到請求后,指示客戶端應臨時重定向到另一個 URL,客戶端會自動向新的 URL 發送請求。

403:

? ? ? ? 表示訪問被拒絕,有的頁面通常需要用戶有一定的權限才能訪問(登陸后才能訪問),如果用戶沒有登錄直接訪問,就容易見到 403。

404:

????????表示服務器無法找到客戶端請求的資源。這意味著客戶端請求的 URL 在服務器上不存在。

500:

????????表示服務器在處理請求時發生了內部錯誤。通常是由于服務器端的出現問題導致無法正常處理請求。

504:

? ? ? ? 當服務器負載比較大的時候,服務器處理單條請求的時候消耗的時間就會很長,就可能會出現超時的情況。

2、(2)??響應頭:

? ? ? ? 與 http 的請求頭結構類似。

2、(3)? 響應正文:?

http 響應的 body 可能會包含?二進制數據,結構化數據(JSON ),文本類數據(HTML網頁)。

????????比如上面例子的黃色圈起來的就是二進制的數據,在數據量大的時候,為了提高數據傳輸效率,節省網絡帶寬和傳輸時間,服務器也經常會對二進制數據進行壓縮后再傳輸。

????????

四、請求行 GET 和 POST 方法的區別:

? ? ? ? GET 和 POST 方法其實沒有本質區別,只是 http 的兩個不同的方法,大部分情況下,使用 GET 的場景,也可以替換成 POST ,使用 POST 的場景,也可以使用 GET。只是在使用習慣上的區別而已。

? ? ? ? 如果非要講出他們兩個的區別,那就是GET 通常沒有 body ,要通過 query string 傳遞數據給服務器,POST 通常由body,不需要?query string 傳遞數據。

? ? ? ? 網絡上有個說法就是GET可以傳輸的最大數據量比 POST 小,這種說法是錯誤的,因為在 http 的官方文檔中,并沒有對 URL 的長度給出限制;網絡上還有個說法就是GET傳輸的時候,query string 只能傳輸文本,不能傳輸二進制數據,這種說法也是錯誤的,因為 query string 可以通過 URL編碼(urlencode)進行數據轉換

五、 https 協議:

? ? ? ? 前面說到,http 協議都是按照文本的方式明文傳輸的,這就會導致一個問題,那就是在傳輸的過程中會出現數據被篡改的情況。

比如:

我想下載一個 “天天動聽音樂播放器” 。

再點擊 “下載按鈕 ”:

突然發現,他的這個下載名稱鏈接,是 “QQ瀏覽器”的下載地址,這是怎么回事?

? ? ? ? 由于我們通過網絡傳輸的任何數據包都會經過網絡設備(路由器,交換機等),那么運營商的網絡設備就可以解析出你傳輸的數據內容,并進行篡改,這種情況也就是運營商劫持

? ? ? ? 點擊“下載按鈕”,其實就是在給服務器發送了一個 http 請求,獲取到的 http 響應其實就是包含了該 APP 的下載鏈接。被運營商劫持后,發現這個請求是要下載 “天天動聽音樂播放器” ,那么就自動把交給用戶的響應給篡改成 “ QQ瀏覽器”的下載地址了。

畫圖解釋:

運營商為什么要劫持?主要是利益關系,這里不細說。

現在運營商劫持的情況大幅減少,https 協議的廣泛使用就是一個重要原因!

1、https 工作過程:

1、(1)對稱加密:

? ? ? ? 生成一個密鑰,明文到密文 和 密文到明文,都需要這個密鑰來進行。對于 http 來說,對整個請求(首行,header,body)和響應(狀態行,header,body)都進行加密。至于首行,雖然header的 Host 字段可以進行一定的校驗,但攻擊者仍然可能通過篡改首行的其他部分(如請求方法等)來進行惡意操作,無法保證整個請求的完整性和真實性。

? ? ? ? 一個服務器要給多個客戶端提供服務,那么他們通信之間使用的密鑰,不能都一樣。所以,既然每個客戶端的密鑰都不一樣,那么,就得有一方生成一個 “隨機密鑰”,這一方可以是服務器,也可以是客戶端。生成密鑰的一方需要通知另一方密鑰是什么,就也得在網絡通信中把密鑰傳輸過去。這也就會有個問題,如果網絡傳輸中間有黑客入侵了某個設備,黑客把密鑰獲取到了,也不行,有沒有什么辦法?

? ? ? ? 解決辦法就是下面的非對稱加密了。

1、(2)非對稱加密:

? ? ? ? 非對稱加密有兩個密鑰對,一個專門用來加密的,另一個專門用來解密的,公鑰是所有人都知道。而私鑰只有一方是知道的。引入非對稱加密,就是為了解決傳輸對稱密鑰的問題,通過公鑰對密鑰加密,通過私鑰對密鑰解密。

圖解:

? ? ? ? 公鑰和私鑰,是服務器生成的一個密鑰對,私鑰服務器自己持有,而公鑰是公開的,所有人都可以知道。

? ? ? ? 上述圖的流程,公鑰把對稱密鑰加密后,傳輸給服務器,服務器通過私鑰解密,得到密鑰具體內容是 “888888”。這樣,由于客戶端和服務器雙方都知道密鑰的具體內容,之后的通信就可以使用密鑰加密數據傳輸了。

? ? ? ? 由于上面的對稱密鑰傳輸的過程,黑客只能拿到公開的公鑰,公鑰只能用來解密,就無法知道加密后的具體對稱密鑰是什么了。

? ? ? ? 到這里,安全性還并不完美,還會有“中間人”攻擊。

1、(3)中間人攻擊:

? ? ? ? 首先,客戶端向服務器詢問公鑰,服務器返回的公鑰經過黑客入侵的設備,黑客自己生成一對公鑰和私鑰,黑客再把自己生成的 公鑰 pub2 返回給客戶端。

????????之后,客戶端拿著 pub2 公鑰對密鑰進行加密,經過黑客入侵的設備,由于密鑰是通過?pub2 來加密的,所以黑客拿著自己生成的私鑰來對密鑰進行解密,得到了對稱密鑰的具體內容,再通過pub1 加密密鑰返回給服務器。服務器再通過自己的私鑰解密獲取到對稱密鑰具體內容。

? ? ? ? 上述可以看到,由于黑客在此過程中,得到了對稱密鑰,還是會有安全問題,怎么辦?下面,引入證書就能解決“中間人”攻擊的問題。

1、(4)通過證書解決“中間人”攻擊:

? ? ? ? 引入證書,就是為了解決“中間人”攻擊的問題,證書解決的核心問題,就是讓客戶端識別當前返回的公鑰是服務器本身的,還是黑客偽造的。服務器一方的運營者會向公正機構獲取證書,證書會包含的字段有:證書的發布機構,證書的有效期,證書的所有者,服務器的 ip/域名,服務器使用的公鑰和私鑰,數字簽名。(數字簽名可以理解公正機構對上面包含的內容計算的一個校驗和,再使用自己的私鑰加密)。

? ? ? ? 網絡通信的時候,客戶端詢問服務器返回的就是證書,返回的證書,客戶端會對證書的字段通過同樣計算校驗和的算法,計算得到一個校驗和 check1 (客戶端自己計算的),再使用公正機構的公鑰來對證書的數字簽名字段解密。得到 check2 (公證機構計算的)。

????????如果 check1 == check2 ,說明證書沒有被篡改過,證書的公鑰就是科學的(服務器的公鑰)。

????????如果 check1 != check2,說明證書被篡改了(有可能篡改了證書里服務器的公鑰),此時瀏覽器 / 客戶端會彈出警告,顯示說網站存在風險 / 證書不受信任。

????????

注意:

? ? ? ? 1.上述的流程中,黑客如果篡改公鑰,那么客戶端計算的 check1 與 證書帶有的 check2 會對不上,客戶端 / 瀏覽器就會識別出來。

? ? ? ? 2.上述流程中,黑客能否自己搞一個證書,替換服務器的返回的整個證書?

? ? ? ? 答案是不能,證書包含了服務器的 ip / 域名,假如客戶端想要訪問百度,返回的證書卻是其他的 ip / 域名,瀏覽器 / 客戶端很容易識別出來。

? ? ? ? 3.黑客是否篡改公鑰的同時,也把數字簽名改了?

? ? ? ? 答案是不能,因為數字簽名是通過公正機構的私鑰來加密的,這個私鑰只能用來加密,而黑客很難獲取對應的公鑰解密。因為公正機構公鑰不是通過網絡獲取的,是內置在操作系統中的。?

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

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

相關文章

使用泛型加載保存數據

文章速覽 泛型泛型概述定義優點 實例加載數據保存數據 一個贊,專屬于你的足跡! 泛型 泛型概述 泛型(Generics)是 C# 中一種重要的編程特性,它允許程序員編寫靈活且類型安全的代碼。通過使用泛型,可以創建…

Redis內存淘汰策略和過期鍵刪除策略有哪些?

Redis 提供 8 種內存淘汰策略,以下是詳細解析及場景建議: 一、核心策略解析 noeviction (默認策略) 機制:內存滿時拒絕新寫入操作,返回錯誤優勢:絕對數據安全場景:金融交易系統、醫療數據存儲 allkeys-lr…

【C/C++】自定義類型:結構體

文章目錄 前言自定義類型:結構體1.結構體類型的聲明1.1 結構體回顧1.1.1 結構的聲明 1.1.2 結構體變量的創建和初始化1.2 結構的特殊聲明1.3 結構的自引用 2.結構體內存對齊2.1 對?規則2.2 為什么存在內存對齊?2.3 修改默認對?數 3. 結構體傳參4.結構體…

PPO算法:一種先進的強化學習策略

什么是PPO算法? PPO(Proximal Policy Optimization)是一種增強學習算法,主要應用于解決連續控制任務。PPO算法在2017年由OpenAI提出,旨在解決傳統策略梯度方法在連續控制任務中面臨的挑戰。PPO算法通過引入一個近似目…

OpenCV實現數字水印的相關函數和示例代碼

OpenCV計算機視覺開發實踐:基于Qt C - 商品搜索 - 京東 實現數字水印的相關函數 用OpenCV來實現數字水印功能,需要使用一些位操作函數,我們需要先了解一下這些函數。 1. bitwise_and函數 bitwise_and函數是OpenCV中的位運算函數之一&…

基于Python的計算機科學研究話題管理系統的設計與實現 - 爬蟲

標題:基于Python的計算機科學研究話題管理系統的設計與實現 - 爬蟲 內容:1.摘要 本文聚焦于基于Python的計算機科學研究話題管理系統的爬蟲部分。背景是隨著計算機科學研究的快速發展,相關話題數據海量且分散,人工管理效率低。目的是設計并實現一個能高…

告別手動解析!借助 CodeBuddy 快速開發網頁源碼提取工具

作為一名長期從事 Web 開發的程序員,我們在日常工作中,時不時會需要查看網頁的源代碼。這么做的目的通常是為了排查前端渲染的問題、分析接口返回的數據結構,或者就是單純地想快速提取頁面中的某些信息,比如文章鏈接、圖片地址&am…

為什么要在 input() 后加 .strip()?

strip() 是 Python 字符串的一個方法,用于去除字符串開頭和結尾的空白字符(包括空格、制表符 \t、換行符 \n 等)。 為什么要在 input() 后加 .strip()? 用戶在輸入時,可能會不小心在開頭或結尾輸入空格,例…

【日擼 Java 300行】Day 14(棧)

目錄 Day 14:棧 一、棧的基本知識 二、棧的方法 1. 順序表實現棧 2. 入棧 3. 出棧 三、代碼及測試 拓展: 小結 Day 14:棧 Task: push 和 pop 均只能在棧頂操作.沒有循環, 時間復雜度為 O(1). 一、棧的基本知識 詳細的介…

dotnet core c#調用Linux c++導出函數

1.聲明C++導出函數 platform_export.h // // Created by dev on 5/6/25. //#ifndef PLATFORM_EXPORT_H #define PLATFORM_EXPORT_H #if defined(_WIN32)#ifdef LIB_EXPORTS#define LIB_API __declspec(dllimport)#else#define LIB_API __declspec(dllimport)#endif #else#ifde…

SparkSQL操作Mysql

前面的課程我們學習了如何從csv文件中讀入數據,這相當于是對csv這種類型的數據的操作。那么接下來,我們一起看看,如何寫Spark程序來操作mysql數據庫。先來給大家介紹一下我們這節課的主要學習內容: (1)安裝…

語言學中的對象語言與元語言 | 概念 / 區別 / 實例分析

注:英文引文,機翻未校。 語言學中的“對象語言”和“元語言” 劉福長 現代外語 1989年第3期(總第45期) 在閱讀語言學著作時,我們有時會遇到這樣兩個術語:對象語言(object language&#xff0…

livenessProbe 和 readinessProbe 最佳實踐

在 Kubernetes 中,livenessProbe 和 readinessProbe 是確保應用高可用性的關鍵機制,但配置不當可能導致應用頻繁重啟或流量中斷。以下是配置這兩個探針的最佳實踐: 1. 核心區別與作用 探針類型目的失敗后果livenessProbe檢測應用是否 存活&…

集成管理工具Gitlab

GitLab 是一個功能強大的開源代碼托管和協作平臺,集成 GitLab 可以顯著提升團隊的開發效率。下面我將為你介紹如何集成 GitLab,包括安裝配置和基本使用流程。 一、GitLab 安裝與配置 GitLab 有多種安裝方式,推薦使用官方 Omnibus 包安裝&am…

Electron-Vue3、Electron-React、Electron-Angular打造輿情監控系統項目

Electron是一個跨平臺的桌面應用開發框架,可以讓我們用html css js的技術開發跨平臺桌面上可以安裝的軟件。視頻詳解: Electron教程 ElectronVue跨平臺桌面軟件開發教程-2024年更新(大地老師) 從Electron環境搭建開始到手把手教你調試、Elect…

08.webgl_buffergeometry_attributes_none ,three官方示例+編輯器+AI快速學習

本實例主要講解內容 這個Three.js示例展示了無屬性幾何體渲染技術,通過WebGL 2的gl_VertexID特性和偽隨機數生成算法,在著色器中動態計算頂點位置和顏色,而不需要在CPU端預先定義幾何體數據。 核心技術包括: WebGL 2的頂點ID特…

Ubuntu 22.04搭建OpenStreeMap地址解析服務(保姆級教程)

1.數據準備 1.1.全球數據 下載地址:https://planet.openstreetmap.org/ 1.2.特定區域的數據 下載地址:Geofabrik Download Server 2.安裝必要的軟件包 2.1.更新系統軟件包 sudo apt updatesudo apt upgrade 2.2.安裝所需要的軟件包 執行下面的命…

Ubuntu 22.04.5 LTS上部署Docker及相關優化

以下是在Ubuntu 22.04.5 LTS上部署Docker及相關優化的步驟: 安裝Docker 更新系統:在安裝Docker之前,先確保系統是最新的,執行以下命令:sudo apt update sudo apt upgrade -y安裝依賴包:安裝一些必要的依賴…

React -> AI組件 -> 調用Ollama模型, qwen3:1.7B非常聰明

使用 React 搭建一個現代化的聊天界面&#xff0c;支持與 Ollama 本地部署的大語言模型進行多輪對話。界面清爽、功能完整&#xff0c;支持 Markdown 渲染、代碼高亮、<think> 隱藏思考標簽、流式漸進反饋、暗黑模式適配等特性。 &#x1f9e9; 核心功能亮點 ? 模型選擇…

vue2/3 中使用 @vue-office/docx 在網頁中預覽(docx、excel、pdf)文件

1. 安裝依賴&#xff1a; #docx文檔預覽組件npm install vue-office/docx vue-demi0.14.6#excel文檔預覽組件npm install vue-office/excel vue-demi0.14.6#pdf文檔預覽組件npm install vue-office/pdf vue-demi0.14.6 vue2.6版本或以下還需要額外安裝 vue/composition-api …