拋磚引玉 HTTP 和 HTTPS

<一個幼兒園小班的前端的成長隨筆,錯誤與不足之處,望各位大牛批評指點,謝謝!>

HTTP/80

超文本傳輸協議: 是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據前端

目的: 設計HTTP是爲了提供一種發佈和接收HTML頁面的方法緩存

  1. HTTP特色: 安全

    • 無狀態:協議對客戶端沒有狀態存儲, 訪問一個網站須要反覆進行登陸操做服務器

    • 無鏈接:HTTP/1.1以前, 因爲無狀態特色, 每次請求須要經過TCP三次握手四次揮手, 和服務器從新創建鏈接[短期屢次請求同一個資源,服務器並不能區別是否已經響應過用戶的請求]cookie

    • 基於請求和響應: 客戶端發送請求,服務端響應網絡

    • 簡單快捷session

    • 通訊使用明文, 請求和響應不會對通訊方進行確認, 沒法保護數據的完整性網站

  2. 針對無狀態 特性的解決策略: 加密

    • 經過cookie/session技術url

    • HTTP/1.1 持久鏈接 : 在請求首部字段中的Connection: keep-alive即爲代表使用了持久鏈接

  3. TCP

    • 運輸層經過 TCP三次握手和服務器創建鏈接,四次揮手釋放鏈接

    • TCP三次握手:

      1. 客戶端發送鏈接請求到服務端

      2. 服務端收到請求響應給客戶端贊成創建鏈接

      3. 客戶端收到服務端的響應,並確認創建鏈接

      若不採用"三次握手" 那麼只要server發出響應贊成創建鏈接,那鏈接就創建了,若是此時先前發送過來的鏈接請求是由網絡結點長時間滯留,以至延誤到鏈接釋放後纔到達server的請求,那此時的客戶端不會確認服務端的響應,也不會向服務端發送數據,但服務端卻會認爲鏈接已經創建,並一直等待客戶端發送數據,就會浪費服務端資源

    • TCP四次揮手:

      1. 客戶端發出FIN報文給服務端,關閉客戶端到服務端的數據傳送

      2. 服務端收到FIN,響應一個ACK

      3. 服務端發送一個FIN給客戶端,關閉服務端到客戶端的鏈接

      4. 客戶端返回一個ACK確認

      簡單理解:

      1)c告訴s: 我吃飽了

      2)s迴應c: 我知道你吃飽了

      3)s告訴c: 我也吃飽了

      4)c和s說: 那結帳走吧

  4. HTTP原理:

    • 客戶端輸入url回車跳轉

    • 檢查應用緩存

      1. 本地緩存 [先判斷是否存在]

      2. 代理緩存 [再判斷是否存在]

    • DNS解析域名獲得服務器的IP地址

    • 服務器在80端口監聽客戶端請求

    • 端口經過TCP/IP協議(能夠經過Socket實現)創建鏈接

    • 客戶端發送請求

    • 服務器響應

    • TCP四次揮手後釋放鏈接

     

HTTPS/443

HTTPS(安全超文本傳輸協議)是一種經過計算機網絡進行安全通訊的傳輸協議,經由HTTP進行通訊,利用SSL/TLS創建全信道,加密處理數據,驗證對方身份及數據的完整性

HTTP + SSL/TLS 創建全信道,加密數據包

目的: 提供對網站服務器的身份認證,同時保護交換數據的隱私與完整性

  1. HTTPS特色:

    • 內容加密: 採用混合加密技術,中間者沒法直接查看明文內容

      混合加密: 結合非對稱加密和對稱加密技術

      1)客戶端使用對稱加密生成密鑰對傳輸數據進行加密

      2)使用非對稱加密的公鑰再對祕鑰進行加密

      -> 網絡上傳輸的數據是被祕鑰加密的密文和用公鑰加密後的祕密祕鑰,所以即便被截取,因爲沒有私鑰,沒法獲取到加密明文的祕鑰,便沒法獲取到明文數據

    • 驗證身份: 經過證書認證客戶端訪問的是本身的服務器

    • 保護數據完整性: 防止傳輸的內容被中間人冒充或者篡改

  2. HTTPS實現原理

    1. client向server發送請求,而後鏈接到server的443端口

    1. 服務端必需要有一套數字證書

      • 本身製做,須要客戶端驗證經過

      • 向組織申請,受信任的公司申請的證書則不會彈出提示頁面

    2. 傳送證書(公鑰)

    1. 客戶端解析證書

      • 由客戶端的TLS完成,驗證公鑰是否有效

      • 生成一個隨機值(祕鑰),而後用證書(公鑰)對該隨機值加密

    2. 傳送加密信息

      • 傳送的是用證書加密後的祕鑰,

    3. 服務端加密信息

      • 服務端用私鑰解密祕密祕鑰,把內容經過該值進行對稱加密

    4. 傳輸加密後的信息

      • 是服務端用私鑰加密後的信息,能夠在客戶端被還原

    5. 客戶端解密信息

      • 客戶端用以前生成的私鑰解密服務端傳過來的信息

  3. HTTPS弊端:

    • SSL證書購買成本

    • 使用HTTPS協議會是頁面加載時間延長50%,增長10%~20%耗電

    • HTTPS鏈接緩存不如HTTP高效, 流量成本高

    • HTTPS鏈接服務器端資源佔用高不少,支持訪客多的網站須要投入更大的成本

SSL/TLS

SSL: 安全套接層,

TLS: 傳輸層安全, 是傳輸層加密協議, 安全傳輸層協議用於在兩個通訊應用程序之間提供保密性和數據完整性

是爲了網絡通訊提供安全及數據完整性的一種安全協議,在傳輸層對網絡鏈接進行加密

  1. SSL協議提供的安全通道特性:

    • 機密性: SSL協議使用密鑰加密通訊數據

    • 可靠性: 服務器和客戶都會被認證,客戶的認證是可選的

    • 完整性: SSL協議會對傳送的數據進行完整性檢查

參考鏈接: [http://www.javashuo.com/article/p-wybdsvhv-kt.html]

相關文章
相關標籤/搜索