主頁 > 後端開發 > 從崩潰的選課系統,論為什么更安全的 HTTPS 協議沒有被全面采用

從崩潰的選課系統,論為什么更安全的 HTTPS 協議沒有被全面采用

2021-02-21 06:11:31 後端開發

?? 盡人事,聽天命,博主東南大學研究生在讀,熱愛健身和籃球,正在為兩年后的秋招準備中,樂于分享技術相關的所見所得,關注公眾號 @ 飛天小牛肉,第一時間獲取文章更新,成長的路上我們一起進步

?? 本文已收錄于 CS-Wiki(Gitee 官方推薦專案,現已 0.9k star),致力打造完善的后端知識體系,在技術的路上少走彎路,歡迎各位小伙伴前來交流學習

0. 前言

上一篇文章詳細講解了 HTTP 的相關原理,我們已經了解到了 HTTP 具有非常優秀和方便的一面,然而,HTTP 并非一個安全的協議,大家平常瀏覽網頁的時候應該也能注意到,使用 HTTP 協議的網站,瀏覽器都會認定這是一個不安全的網站,提醒用戶注意防范(即便這是我們學校的選課系統),

當然,這個不安全的含義指的是你在該網頁輸入的資訊可能會被外界攻擊者以非正常手段竊取,而不是說會被這個網頁的開發者獲取,畢竟瀏覽器咋能判斷這個網頁開發者是否存有異心,這個需要用戶自行判斷(手動滑稽 ??)

那么為了克服 HTTP 的缺點,確保 Web 的安全,HTTPS 就應用而生了,可以看見,使用 HTTPS 協議的網頁,地址欄前面都會有把小鎖,表示這是一個加密安全的網站,你的資訊發送到此站點時是保密的,而且 Google、Baidu 等搜索引擎巨頭對于 HTTPS 網站都會給到更好的搜索排名,

本文會先解釋 HTTP 為什么是不安全的,然后講解 HTTPS 為了保證 Web 的安全提供了哪些手段,最后再揭曉謎底,為什么更安全的 HTTPS 協議在互聯網上沒有被全面采用,

1. 不安全的 HTTP

通過上面那張圖我們已經知道,對于使用 HTTP 的網站,瀏覽器就會提醒我們請勿在此網站上輸入任何敏感資訊,否則可能會被攻擊者竊取,沒錯,這就是 HTTP 協議不安全的表現,而且,僅僅是其中之一,HTTP 的不安全性體現在很多方面,例舉如下:

  • 通信使用明文(不加密),內容可能被竊聽

  • 不驗證通信對方的身份,因此有可能遭遇偽裝

  • 無法證明報文的完整性,所以有可能被篡改

當然,這些問題不僅在 HTTP 上出現,其他未加密的協議中也存在類似問題

下面我們詳細分析下上述問題出現的原因,

① 內容被竊聽

所謂互聯網,是由能連接到全世界的網路組成的,萬物互聯,無論世界哪個角落的服務器在和客戶端進行通信時,在此通信線路上的網路設備、光纜、計算機都可能會遭到惡意窺視行為,也就是說,互聯網上的任何角落都存在通信內容被竊聽的風險,

而由于 HTTP 本身不具備加密的功能,所以也無法做到對 HTTP 請求和回應報文進行加密,

但是!即使是加密過的通信內容,也會被窺視到,這點和未加密的通信是相同的,只能說經過加密后的內容,即便被攻擊者窺視到,他也可能無法破解其中的含義罷了,但是加密處理后的報文資訊本身還是會被看到的,這點大家不要混淆了,加密后的內容尚且如此,更別說未加密的了,

② 身份被偽裝

HTTP 的請求和回應不會對通信方進行確認,也就是說任何人都可以發起請求,而服務器對請求者來者不拒,只要接收到請求,就會回傳一個回應,

顯然,正是由于 HTTP 的這種簡單性,導致了如下隱患:

1)客戶端發送的 HTTP 請求報文可能到達的并非真正的目的服務器,可能是已偽裝的服務器

2)服務器回傳的 HTTP 回應報文可能也并沒有被正確的客戶端所接收,可能是已偽裝的客戶端

3)無法確定正在通信的對方是否具備訪問權限

4)無法判定請求來自何方,出自誰手

5)即使是無意義的請求也會照單全收

③ 報文被篡改

HTTP 無法證明報文的完整性,所謂完整性就是指資訊的準確度,若無法證明完整性,在 HTTP 請求或回應 送出之后直到對方接收的這段時間內,即使請求或回應的內容遭到攻擊者篡改,也沒有辦法獲悉,

通俗來說,HTTP 沒有辦法確認發送出去的請求和接收到的請求是否一致

舉個例子,你從某個使用 HTTP 的非正規網站上下載微信 APP,存放在服務器上的檔案確實是微信 APP,但是,在你下載的程序當中,攻擊者攻擊了這個網站,你正在傳輸的檔案內容被篡改成了其他檔案,而在這個程序中,你是完全察覺不到的,

像這樣的在請求或回應在傳輸途中,遭受攻擊者攔截并篡改內容的攻擊稱為中間人攻擊(Main-in-the-Middle attack, MITM),

2. 安全的 HTTPS

HTTPS 協議并非應用層的一個新協議,只是 HTTP 通信介面部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)協議代替而已,

通常 HTTP 是直接和 TCP 進行通信的,當使用 SSL 時,則演變成先和 SSL 通信,再由 SSL 和 TCP 進行通信,簡而言之,所謂 HTTPS,就是身批 SSL 協議外殼的 HTTP

在采用 SSL 后,HTTP 就擁有了加密、證書和完整性保護等功能,而這些功能正是用來解決我們上述所說的 HTTP 不安全問題的,

另外,SSL 是獨立于 HTTP 協議的,所有運行在應用層的協議都可以配合 SSL 協議使用,可以說,SSL 協議是當今世界上應用最為廣泛的網路安全技術,

那么,針對上述 HTTP 的三個安全性問題,我們來看看 HTTPS 或者說 SSL 到底提供了哪些解決方案,

① 加密

這個上文也提到了,既然無法阻止被竊聽,那么我就把我的內容加密起來,讓你無法破解,那么,既然發送方對通信內容進行了加密,接收方接收到這個被加密過的內容,一定要知道對應的解密手段,

在講解下述的幾種加密方法之前,我們先理解密鑰的概念,所謂密鑰,就是鑰匙,加密方有一把密鑰,用來上鎖,解密方也擁有一把密鑰,用來解鎖,而且加密方和解密方使用的密鑰不一定是同一把,

共享密鑰加密

加密和解密使用同一密鑰的方式稱為共享密鑰加密(Common Key crypto system),也稱做對稱密鑰加密(這個更好理解),

以共享密鑰加密時必須將密鑰也發送給對方,顯然,如果通信雙方都各自持有同一個密鑰,且沒有別人知道,則兩方的通信安全是可以被保證的(除非密鑰被破解),

那么,最大的問題就是如何保證這個密鑰的安全傳輸,不被外部攻擊者知道,如果由服務器生成一個密鑰并傳輸給瀏覽器,這個傳輸程序中密鑰被攻擊者劫持,那么之后攻擊者就能用這把密鑰解開雙方傳輸的任何內容,

發送密鑰就有被竊聽的危險,但不發送,對方就不能解密,怎么樣才能安全的發送密鑰?解決這個問題,我們就需要公開密鑰加密(非對稱密鑰加密),

公開密鑰加密

公開密鑰加密很好的解決了共享密鑰加密的困難,

公開密鑰加密需要一組非對稱的密鑰對,分別是公鑰 public key 和私鑰 private key,顧名思義,公鑰可以隨意發布,任何人都可以獲得,而私鑰不能讓除通信雙方外的其他任何人知道,這兩個密鑰是成對出現的,公鑰加密的內容需要對應的私鑰解密

舉個例子:客戶端(瀏覽器)想要給網站服務器發送訊息

  • 首先,網站服務器持有一組公鑰和私有,它會把自己的公鑰明文傳輸給客戶端

  • 客戶端利用這個公鑰給自己的訊息進行加密,然后傳輸給服務器,這時候就算被攻擊者截獲,由于攻擊者沒有對應的私鑰也無法解密該內容

  • 網站服務器收到后,使用這個公鑰對應的私鑰進行解密

利用這種方式,不需要發送解密需要的私鑰,也就不必擔心私鑰被攻擊者盜走

混合加密方式

上述公開密鑰加密的方式雖然安全,但是相比于不那么安全的共享密鑰加密方式來說,其處理速度要慢很多,HTTPS 綜合這兩種加密方式的優勢,使用共享密鑰加密要發送的資訊,使用公開密鑰加密這個共享密鑰,這樣就減少了公開加密的次數,舉個例子:

  • 某網站服務器擁有一組用于公開密鑰加密的非對稱密鑰:公鑰 A1、私鑰 A2

  • 瀏覽器向網站服務器請求,服務器把公鑰 A1 明文給傳輸瀏覽器

  • 接收到這把公鑰 A1 后,瀏覽器隨機生成一個用于共享密鑰加密(對稱加密)的密鑰 X,用公鑰 A1 加密后傳給服務器,這個階段,即便被攻擊者截獲,由于攻擊者沒有對應的私鑰也無法解密該內容

  • 服務器拿到后用對應的私鑰 A2 解密得到密鑰 X(以上這些階段就是公開密鑰加密)

  • 這樣雙方就都擁有密鑰 X 了,且別人無法知道它,之后雙方之間所有的資料傳輸都使用密鑰 X 進行加密和解密即可(這個階段就是共享密鑰加密)

② 數字證書

遺憾的是,上述混合加密的方式仍然還是有漏洞的,攻擊者(中間人)的確無法得到瀏覽器生成的對稱密鑰 X,這個密鑰本身被公鑰 A1 加密,只有使用服務器擁有的私鑰 A2 才能解密,但是!攻擊者完全不需要拿到服務器私有的私鑰 A2 就能劫持資訊,舉個例子:

  • 某網站服務器擁有一組用于公開密鑰加密的非對稱密鑰:公鑰 A1、私鑰 A2

  • 瀏覽器向網站服務器請求,服務器把公鑰 A1 明文給傳輸瀏覽器

  • 攻擊者劫持到公鑰 A1,保存下來,把資料包中的公鑰 A1 替換成自己偽造的公鑰 B1(它當然也擁有公鑰 B1 對應的私鑰 B2)

  • 瀏覽器隨機生成一個用于對稱加密的密鑰 X,用攻擊者的公鑰 B1(服務器此時不知道自己的公鑰被替換了)加密后傳給服務器

  • 攻擊者劫持后用自己的私鑰 B2 解密就得到了密鑰 X,然后再用服務器的公鑰 A1 加密后傳給服務器

  • 服務器接收到攻擊者用公鑰 A1 加密的資訊后,用對應的私鑰 A2 解密得到密鑰 X

這樣在客戶端瀏覽器和網站服務器都沒有發現例外的情況下,攻擊者得到了對稱密鑰 X,此后客戶端和瀏覽器雙方通過對稱密鑰 X 加密發送的任何內容,攻擊者都可以輕松破解,

 

上述程序就是典型的中間人攻擊,其根本原因是瀏覽器客戶端無法確認自己收到的公鑰是不是真正的網站服務器的,那么下一步就是解決這個問題:? 如何證明瀏覽器客戶端收到的公鑰一定是該網站服務器的公鑰?防止服務器和客戶端的身份被偽裝,

其實很簡單,大家想一下在現實生活中,如何證明小明說出的身份證號確實是它自己的,怎么辦?看看小明的身份證就可以了,身份證是由誰頒發的?政府機構,那么這里政府機構就起到了公信的作用,它本身的權威可以對一個人的身份資訊作出證明,

對應的,互聯網中也有這么一個公信機構,數字證書認證機構 Certificate Authority, CA,所謂公信機構,就是客戶端和瀏覽器都信賴的第三方機構,

網站服務器在使用 HTTPS 前,需要向 CA 申請頒發數字證書,數字證書里有證書持有者、證書持有者的公鑰等資訊,服務器把數字證書明文傳輸給瀏覽器客戶端,然后瀏覽器從證書里取出服務器的公鑰就可以了,

然而這里又有一個顯而易見的問題:證書本身的傳輸程序中,如何防止被篡改?即如何證明證書本身的真實性? 數字證書怎么防偽呢?

③ 數字簽名

數字證書認證機構 CA 在判明提出申請者的身份之后,會對其申請的公開密鑰做數字簽名,然后將數字簽名和公開密鑰放入數字證書,而客戶端在收到服務器發送來的數字證書后,對證書上面的數字簽名進行驗證,如何這個數字簽名和證書上的原始公開密鑰 Hash 后的結果一致,那么客戶端便可明確兩件事情:

  • 認證服務器的公開密鑰的是真實有效的數字證書認證機構

  • 服務器的公開密鑰是值得信賴的

OK,這么說還不太清楚,我們先來了解什么是數字簽名?

數字證書認證機構 CA 把要傳送的明文資訊(也就是申請認證的網站服務器的公鑰)通過 Hash 演算法得出摘錄資訊 MIC(摘錄技術),再用自己的私鑰對 MIC 值進行加密,就得到了得到數字簽名,

解釋一下:認證機構一般會持有一組公鑰 A1 和私鑰 A2,為了確保證書的安全性,瀏覽器客戶端通常會在內部事先植入常用認證機構的公鑰 A1,認證機構在頒發數字證書的時候,會用自己的私鑰 A2 對數字簽名進行加密,而瀏覽器接收到數字證書后,先利用事先存盤好的公鑰 A1 解密數字簽名,再對數字簽名進行驗證,

下面是這個程序的總結提煉,大家配合圖片直觀理解一下,

1)CA 頒發數字證書給網站的程序

  • CA 擁有非對稱加密的私鑰和公鑰

  • 網站申請數字證書,并發送自己的公開密鑰 A

  • CA 對網站的公開密鑰 A 進行 Hash 得到摘錄資訊 MIC

  • 對 MIC 值用 CA 的私鑰加密,繼而得到數字簽名

  • 將數字簽名和網站的公開密鑰 A 放進數字證書發放給網站

 

2)瀏覽器客戶端驗證網站數字證書的程序

  • 瀏覽器客戶端接收到網站服務器發來的數字證書,得到網站的公鑰 A 和數字簽名 S1

  • 瀏覽器使用事先植入的 CA 機構的公鑰對 S1 進行解密,得到 S2

  • 用數字證書里說明的 Hash 演算法對網站的公鑰 A 進行 Hash 得到 A2,

  • 比較 S2 是否等于 A2,若相等則表示證書可信,于是瀏覽器就可以放心的取出數字證書中的網站公鑰 A 進行使用

3. 為什么 HTTPS 沒有被全面采用

回到文章標題,既然 HTTPS 安全可靠,那為什么不所有的 Web 網站都使用 HTTPS 呢?

其中一個原因就是,由于使用了加密通信, 相比于純文本通信的 HTTP 來說,HTTPS 會消耗掉更多的 CPU 及記憶體資源,如果每次通信都加密,會消耗掉非常多的資源,平攤到一臺計算機上時,能夠處理的請求數量必定也會隨之減少,一些國際大型網站比如維基百科等,在啟用 HTTPS 前都會先考慮自己服務器資源和計算能力是否可以承載 HTTPS,

因此,如果是非敏感資訊,使用 HTTP 通信也無妨,只有在涉及個人敏感資訊等資料時,才需要使用 HTTPS,

另外,開啟 HTTPS 需要申請 SSL 證書,高額的證書申購費用會讓很多網站開發者望而卻步,

看到這里,不知道大家能不能夠理解為什么基本上所有學校的選課系統全是 HTTP 了:

  • 首先,大部分選課系統基本都需要校園網或者 VPN 才能夠登錄,不需要考慮被外界攻擊或者資訊泄露問題

  • 其次,即便使用的是 HTTP,選課系統開放的初期猛量的高并發尚且會讓服務器崩潰,就甭說 HTTPS 了

所以綜合來說,校內選課系統完全沒必要增加額外的運行和維護成本來使用 HTTPS,

 

?? 關注公眾號 | 飛天小牛肉,即時獲取更新

  • 博主東南大學研究生在讀,利用課余時間運營一個公眾號『 飛天小牛肉 』,2020/12/29 日開通,專注分享計算機基礎(資料結構 + 演算法 + 計算機網路 + 資料庫 + 作業系統 + Linux)、Java 基礎和面試指南的相關原創技術好文,本公眾號的目的就是讓大家可以快速掌握重點知識,有的放矢,希望大家多多支持哦,和小牛肉一起成長 ??

  • 并推薦個人維護的開源教程類專案: CS-Wiki(Gitee 推薦專案,現已 0.9k star), 致力打造完善的后端知識體系,在技術的路上少走彎路,歡迎各位小伙伴前來交流學習 ~ ??

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261602.html

標籤:Java

上一篇:JUnit5學習之二:Assumptions類

下一篇:Java集合

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more