妥妥的去面試之計算機網路
1、HTTP和HTTPS有什麼區別?
HTTPS簡單的說就是HTTP的安全版。HTTP協議傳輸的資料都是未加密的,也就是明文,這對於傳輸一些私密的資訊來說是不安全的,於是就出現了HTTPS,HTTPS是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比HTTP安全。
它們的主要區別:
- HTTPS需要到ca申請證書,一般免費證書很少,需要交費。
- HTTP是超文字傳輸協議,資訊的密文傳輸,而HTTPS是具有安全性的ssl加密傳輸協議。
- 它們的使用的是不一樣的連線方式和埠。HTTP是80,HTTPS是443
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象識別符號體系),句法類同http:體系。用於安全的HTTP資料傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同於HTTP的預設埠及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司進行,提供了身份驗證與加密通訊方法,現在它被廣泛用於全球資訊網上安全敏感的通訊,例如交易支付方面。
簡單說一下HTTPS的工作流程?
- 客戶端使用https的URL訪問Web伺服器,要求與Web伺服器建立SSL連線。
- Web伺服器收到客戶端請求後,會將網站的證書資訊(證書中包含公鑰)傳送一份給客戶端。
- 客戶端的瀏覽器與Web伺服器開始協商SSL連線的安全等級,也就是資訊加密的等級。
- 客戶端的瀏覽器根據雙方同意的安全等級,建立會話金鑰,然後利用網站的公鑰將會話金鑰加密,並傳送給網站。
- Web伺服器利用自己的私鑰解密出會話金鑰。
- Web伺服器利用會話金鑰加密與客戶端之間的通訊。
建議與此部落格共同食用HTTP與HTTPS的區別
客戶端如何校驗 CA 證書?
CA 證書中的 Hash 值,其實是用證書的私鑰進行加密後的值(證書的私鑰不在 CA 證書中)。然後客戶端得到證書後,利用證書中的公鑰去解密該 Hash 值,得到 Hash-a ;然後再利用證書內的簽名 Hash 演算法去生成一個 Hash-b 。最後比較 Hash-a 和 Hash-b 這兩個的值。如果相等,那麼證明了該證書是對的,服務端是可以被信任的;如果不相等,那麼就說明該證書是錯誤的,可能被篡改了,瀏覽器會給出相關提示,無法建立起 HTTPS 連線。除此之外,還會校驗 CA 證書的有效時間和域名匹配等。
2.HTTPS的SSL握手建立過程?
假設現在有客戶端A和伺服器B:
- 首先,客戶端A訪問伺服器B。這時候客戶端 A 會生成一個隨機數1,把隨機數1 、自己支援的 SSL 版本號以及加密演算法等這些資訊告訴伺服器 B 。
- 伺服器B收到這些資訊後,然後確認一下雙方的加密演算法,然後服務端也生成一個隨機數B,並將隨機數B和CA 頒發給自己的證書一同返回給客戶端A。
- 客戶端A得到CA證書後,會去校驗該CA 證書的有效性,校驗方法在上面已經說過了。校驗通過後,客戶端生成一個隨機數3,然後用證書中的公鑰加密隨機數3,並傳輸給服務端B
- 服務端B得到加密後的隨機數3,然後利用私鑰進行解密,得到真正的隨機數3。
- 最後,客戶端A和服務端B 都有隨機數1、隨機數2、隨機數3,然後雙方利用這三個隨機數生成一個對話金鑰。之後傳輸內容就是利用對話金鑰來進行加解密了。這時就是利用了對稱加密,一般用的都是 AES 演算法。
- 客戶端A通知服務端B ,指明後面的通訊用對話金鑰來完成,同時通知伺服器B客戶端A的握手過程結束。
- 服務端B通知客戶端A,指明後面的通訊用對話金鑰來完成,同時通知客戶端A伺服器B的握手過程結束。
- SSL的握手部分結束,SSL安全通道的資料通訊開始客戶端A和伺服器 B開始使用相同的對話金鑰進行資料通訊。
3.HTTP1.1和HTTP1.0的主要區別?
- 快取處理 。HTTP1.1加入了更多的快取頭來控制快取策略;
- 頻寬的優化 。HTTP1.0中,存在一些浪費頻寬的現象,例如客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了。HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,充分利用了頻寬;
- 長連線 。HTTP1.1支援了長連線,減少了在建立和關閉連線時不必要的消耗和延遲。
- 錯誤通知的管理 ,在HTTP1.1中新增了24個錯誤狀態響應碼;
- HTTP1.1的請求訊息和響應訊息都應支援Host頭域。
注意:HTTP長連線指的是TCP的連線
Http1.0是短連線,HTTP1.1預設是長連線,也就是預設Connection的值就是keep-alive。但是長連線實質是指的TCP連線,而不是HTTP連線。TCP連線是一個雙向的通道,它是可以保持一段時間不關閉的,因此TCP連線才有真正的長連線和短連線這一說。
4.GET和POST請求方式的主要區別?
- GET主要是從指定的資源請求資料。POST是向指定的資源提交要被處理的資料
- GET請求提交的資料是放在URL上的,但POST是放在請求體裡,所以在GET的資料大小是收到URL的限制,但POST請求就沒有限制。
- POST請求比GET請求更安全,因為請求資料放在URL上很容易就被第三方盜取,但把資料放在請求體的POST就相對來說更安全。
5.HTTP中Cookie和Session的作用和區別?
作用:
HTTP協議是一種無狀態協議,在資料交換完畢後,服務端和客戶端的連結就會關閉,每次交換資料都需要建立新的連結。此時,伺服器無法從連結上跟蹤會話。cookie和session可以跟蹤會話,彌補HTTP無狀態協議的不足。
區別:
session機制採用的是在服務端保持狀態的方案,而cookie機制則是在客戶端保持狀態的方案。
cookie原理:
- 伺服器建立cookie物件,把會話資料儲存到cookie物件中;
- 伺服器傳送cookie資訊到瀏覽器;
- 瀏覽器得到伺服器傳送的cookie,然後儲存在瀏覽器端;
- 瀏覽器在下次訪問伺服器時,會帶著cookie資訊;
- 伺服器接收到瀏覽器帶來的cookie資訊。
Session原理:
- 第一次訪問建立session物件,給session物件分配一個唯一的ID,叫JSESSIONID;
- 把JSESSIONID作為Cookie的值傳送給瀏覽器儲存;
- 第二次訪問的時候,瀏覽器帶著JSESSIONID的cookie訪問伺服器;
- 伺服器得到JSESSIONID,在伺服器的記憶體中搜索是否存放對應編號的session物件;
- 如果找到對應編號的session物件,直接返回該物件;
- 如果找不到對應編號的session物件,建立新的session物件。
6.TCP/UDP
有關TCP/UDP的面試問題
- TCP和UDP的區別
- 三次握手
- 四次揮手
建議檢視筆者的這篇部落格