天天看點

20190305 HTTP & HTTPS & SSL & TCP & socket

HTTPS

HTTP缺點:用戶端和服務端的資料一旦被抓包,他們之間的互動資訊就會洩漏,除非伺服器自己對關鍵的資訊進行加密,否則沒有什麼安全性可言。

簡單了解:HTTPS = HTTP + SSL/TLS

SSL/TLS協定:為網絡通信提供安全性和資料完整性的一種安全協定,在傳輸層對網絡進行加密。

具體表現:

  1. 認證使用者和伺服器,保證資料發送到正确的位置
  2. 對發送的資料進行加密,保護資料
  3. 保證資料在發送的過程中資料的完整性

過程:

  1. 用戶端向服務端索要公鑰(公鑰一般放在證書中)
  2. 雙方協商對稱秘鑰
  3. 使用對稱秘鑰進行加密通信

HTTPS的傳輸過程:

  1. 伺服器必須有一個CA認證合法授權的證書,浏覽器保持一個信任的CA機構清單,通過這個機構查詢伺服器所提供的證書是否合法,隻有通過認證的伺服器才會被認為是可靠的。
  2. 如果CA認證通過,浏覽器會從證書中取的公鑰,通過公鑰協商出一個随機的對稱秘鑰,伺服器在傳輸資訊的時候使用對稱秘鑰進行加密,浏覽器接收到消息,使用對稱秘鑰進行解密。

HTTPS的優點:保證了資料的安全性和資料的完整性

HTTPS的缺點:1. CA機構頒發的證書都是需要費用的 2. 需要一定的技術支援 3. 一部分的網站并不關心其安全性

HTTP

  • 概念

    HTTP:超文本傳輸協定

    特點:用戶端每次請求都需要服務端進行響應。

    一次連接配接

    包括建立連接配接(TCP三向交握)和關閉連接配接(TCP四次揮手)。
  • HTTP 0.9
    • get請求
  • HTTP 1.0
    • post、head
    • 頭資訊、狀态碼、緩存等。
    • 短連接配接

      每個TCP連接配接隻能發送一個請求

缺點: TCP連接配接成本高,而每個請求都要進行一次TCP連接配接。并keep-alive不是标準的Connection字段
  • HTTP 1.1
    • 持久連接配接

      對于同一個域名,大多數浏覽器允許同時建立6個持久連接配接

    • 管道機制

      pipelining,同一個TCP連接配接中可以發送多個請求。允許浏覽器同時發出A請求和B請求,但是伺服器還是按照順序,先回應A請求,完成後再回應B請求。

    • Host

      指定伺服器域名

缺點:一個TCP連接配接裡面的請求是按照次序進行的,隻有處理完一個,才能進行下一個,可能造成

隊頭阻塞

。優化:減少請求數、分片Sharding(将請求配置設定到各個主機上),Spriting(多個圖檔合成一個圖檔)等。
  • HTTP 2.0
    • 二進制協定(幀)

      頭資訊和資料體都是二進制的,統稱為’幀‘。

    • 多路複用

      複用TCP連接配接,一個請求中用戶端和伺服器端可以同時發送多次請求和響應。解決

      隊頭阻塞

      20190305 HTTP & HTTPS & SSL & TCP & socket
    • 頭資訊壓縮
      1. 頭資訊使用gzip或compress壓縮後再發送;
      2. 用戶端和伺服器同時維護一張頭資訊表,所有字段都會存入這個表,生成一個索引号,以後就不發送同樣字段了,隻發送索引号,這樣就提高速度了。
    • 伺服器推送

      伺服器可以預期到用戶端請求網頁後,很可能會再請求靜态資源,是以就主動把這些靜态資源随着網頁一起發給用戶端了。

  • 了解
    • 請求格式
      GET / HTTP/1.0
        User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
        Accept: */* // 聲明自己可以接收哪些格式
        Accept-Encoding: gzip, deflate // 聲明自己可以接受的壓縮方法
        Connection: keep-alive // 要求伺服器不要關閉TCP連接配接
      
                 
    • 響應格式
      HTTP/1.0 200 OK 
        Content-Type: text/plain // 告訴用戶端資料是什麼格式
        Content-Length: 137582 // 本次響應的資料長度
        Transfer-Encoding: chunked // 
        Content-Encoding: gzip // 說明發送的資料的壓縮方法
        Cache-Control: max-age=18000 // 若設定了Cache-Control會忽略Expires
        Expires: Thu, 05 Dec 1997 16:00:00 GMT // 響應過期時間
        Last-Modified: Wed, 5 August 1996 15:55:28 GMT
        Server: Apache 0.84
      
        <html>
          <body>Hello World</body>
        </html>
                 

socket套接字

  • 概念
    • TCP/IP協定進行通信的基本單元。
    • 一個套接字必須包括:連接配接使用的協定、本地主機IP位址、本地程序協定端口、遠端主機IP位址、遠端程序協定端口。
    • 區分來自不同的應用程式或者連接配接的通信,實作資料傳輸的并發服務。
  • 建立socket連接配接
    • 至少需要一對套接字:一個運作在用戶端,一個運作在伺服器端
    • 連接配接過程:伺服器監聽,用戶端請求,連接配接确認
      20190305 HTTP &amp; HTTPS &amp; SSL &amp; TCP &amp; socket
  • socket連接配接與TCP連接配接

    建立socket連接配接時,可以指定傳輸層的協定是TCP或者UDP,當選擇TCP時,一個socket連接配接就是一個TCP連接配接。

  • socket連接配接與HTTP連接配接
    • HTTP連接配接需要用戶端發送請求之後伺服器端才會響應資料。
    • 伺服器就可以直接将資料傳送給用戶端,保持用戶端與伺服器資料的實時與同步
20190305 HTTP &amp; HTTPS &amp; SSL &amp; TCP &amp; socket

TCP

TCP:傳輸控制協定

  • 其實前兩次已經能夠通話了,那麼為什麼要出現第三次握手呢?
    防止乙一直等待而浪費自己的時間。
               
  • 三次握手四次揮手
    20190305 HTTP &amp; HTTPS &amp; SSL &amp; TCP &amp; socket

繼續閱讀