Java每日一面(Part1:計算機網路)[19/11/25]
個人微信公眾號:程式猿的月光寶盒
1. HTTP相關[2]
1.1Get請求和Post請求的區別
從三個層面來回答:
1.1.1 從HTTP報文層面:
Get請求將請求資訊放在URL後面,請求資訊和URL之間用問號(?
)隔開,多個請求資訊之間用&
隔開,形式是鍵值對
的形式,且有長度限制.
Post請求是放在報文體中,想獲得請求資訊必須請求報文,因此,安全性較Get要高一些,但是可以通過抓包工具獲取資訊,所以不是絕對安全,具體還要靠https
,沒有長度限制
1.1.2 從資料庫層面:
Get符合冪等性和安全性,Post不符合
冪等性:
對資料庫的一次操作和多次操作獲得的結果是一致的
安全性:
對資料庫的操作沒有改變資料庫中的資料
1.1.3 從其他層面上看
Get可以被快取,被儲存,會被儲存在瀏覽器的瀏覽記錄中,以Get方式傳送的URL可以儲存為瀏覽器書籤,而post不行
1.2 Cookie和Session的區別:
兩者產生的原因:HTTP的最大特點:無狀態,每次登陸某網站都要不厭其煩輸入帳號密碼,對此,就產生的Cookie和Session.
1.2.1 Cookie簡介:
是由伺服器傳送給客戶端的特殊資訊,以文字的形式存放在客戶端
客戶端再次請求的時候,會把Cookie回發
伺服器接收到後,會解析Cookie生成 與客戶端相對應的內容
1.2.1.1 Cookie的設定和傳送過程
客戶端傳送http請求到服務端,
服務端傳送http響應到客戶端,其中包括了Set-Cookie頭部
客戶端傳送http請求到服務端,包括了Cookie頭部
伺服器傳送http相應到客戶端
1.2.2 Session簡介
服務端的機制,在服務端上儲存資訊
解析客戶端請求並操作Session id,按需儲存狀態資訊
1.2.2.1 Session的實現方式
1.使用Cookie實現
伺服器給每個Session分配一個唯一的JSessionID,並通過Cookie傳送給客戶端,當客戶端傳送新的請求的時候,將在Cookie頭中攜帶JSessionID,這樣伺服器就能找到相對應的Session
2.使用URL回寫實現
指伺服器在傳送給瀏覽器的所有頁面中都攜帶JSessionID的引數,這樣客戶端點選任何一個連線都會把JSessionID的值傳給服務端
1.2.3 Cookie和Session的區別
1.Cookie資料存放在瀏覽器,Session存放在伺服器
2.Session相對Cookie安全
3.若考慮伺服器負擔,應當使用Cookie
1.3 HTTP和HTTPS的區別
1.3.1 HTTPS簡介
是一個以安全通行為目的的傳輸協議,是一個安全版的Http
1.3.2 SSL(Security Sockets Layer,安全套接層)
1.為網路通訊提供安全及資料完整性的一種安全協議
2.是作業系統對外提供的API,SSL3.0後改名為TLS
那麼它如何保護安全及資料完整性?
採用身份驗證
和資料加密
保證網路通訊的安全和資料的完整性
1.3.3加密方式
1.對稱加密:
加密和解密都使用同一個祕鑰,效能較高,安全性相對不強
2.非對稱加密:
加密和解密使用的祕鑰都是不同的,分別稱為公鑰和私鑰,效能較低,安全性超強
3.雜湊演算法:
將任意長度的資訊轉換為固定長度的值,演算法不可逆(常見的MD5演算法)
4.數字簽名:
證明某個訊息或者檔案是從某人發出/認同的
1.3.4Https資料傳輸流程
1.瀏覽器將支援的加密演算法資訊傳送給伺服器
2.伺服器選擇一套瀏覽器支援的加密演算法,以證書的形式回發給瀏覽器
3.瀏覽器驗證證書的合法性,並結合證書公鑰加密資訊傳送給伺服器
4.伺服器使用私鑰解密資訊,驗證雜湊,加密響應資訊回發瀏覽器
5.瀏覽器解密響應資訊,並對資訊進行驗證,之後進行加密互動資料
1.3.5 HTTP和HTTPS的區別
1.HTTPS需要到CA申請證書,HTTP不需要
2.HTTPS密文傳輸,HTTP明文傳輸
3.連線方式不同,HTTPS預設使用443埠,http使用80埠
4.HTTPS=HTTP+加密+認證+完整性保護,較HTTP安全
1.3.6HTTPS真的安全嗎
未必
1.瀏覽器預設填充http://
,請求需要進行跳轉,有被劫持的風險
2.可以使用HSTS(HTTP Strict Transport Security)優化
以上,計算機網路部分結