1. 程式人生 > >HTTP、HTTPS區別&詳解

HTTP、HTTPS區別&詳解

HTTP協議版本:

· HTTP1.0(短連線,發一次建立一次)

· HTTP1.1(長連線)

什麼是長連線、短連線:

    短連線:客戶端和服務端每進行一次HTTP操作,就建立一次連線。任務結束就中斷連線,當客戶端瀏覽器訪問的某個HTML或者其他型別的Web頁面中包含有其他的Web資源,沒遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。
    長連線:使用長連線的HTTP協議,會再響應頭加入這行程式碼: Connection:keep-alive。再使用長連線的情況下,當一個網頁開啟完成客戶端和服務端用於傳輸HTTP資料的TCP連線不會關閉,客戶都拿再次訪問這伺服器的時候,會繼續使用這一條已經建立的連線。keep-alive不會保持永久連線,它有一個保持時間,可以在不同的伺服器軟體中設定這個時間。

HTTP協議主要的特點:

    1. 簡單快速:客戶端向伺服器請求資料時,只需要傳輸請求方法和路徑。
    2. 靈活:HTTP協議允許傳輸任意型別的資料物件。正在傳輸的型別由 Content-Type 加以標記。
    3. 無連線:每次連線只處理一個請求。伺服器處理完客戶端的請求,並且收到客戶端的應答之後,即斷開連線。
    4. 無狀態:HTTP協議時無狀態協議。無狀態指的是協議對於事物處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,就必須要重傳。
    5. 支援 C/S、B/S

HTTP的工作流程

    1. 首先客戶端和伺服器需要建立連線,只需要單機某個超連結,HTTP的工作開始。
    2. 建立連線之後,客戶端傳送一個請求給伺服器,請求方式的格式為:統一資源識別符號(URL)、版本號、後邊是MIME資訊,包括請求修飾符、客戶機資訊和可能的內容。
    3. 伺服器接到請求之後,給予相應的響應資訊。其格式為一個狀態行,包括資訊的協議版本號、一個成功或者失敗的程式碼,後面是MIME資訊包括伺服器資訊,實體資訊和可能的內容。
    4. 客戶端接收伺服器所返回的資訊通過瀏覽器顯示在客戶的顯示屏上,然後客戶機與伺服器斷開連線。

常見HTTP狀態碼

狀態碼 含義 詳情
200 OK 伺服器成功處理了請求
301 永久移動 請求的網頁已經永久移動到了新位置。伺服器返回響應時,會自動將請求者轉到新的位置
302 臨時移動 伺服器目前從不同的位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求
307 臨時重定向 伺服器目前從不同的位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求
400 錯誤請求 伺服器不理解請求的語法
403 禁止 伺服器拒絕請求
404 未找到 伺服器找不到請求的網頁
500 伺服器內部錯誤 伺服器遇到錯誤無法完成請求

HTTP和HTTPS的區別:

區別:
    1. HTTPS需要的ca申請證書,一般免費的證書比較少,需要一定的費用。
        拓展:ca(certification authority)是已構建在公鑰基礎設施pki(public key infrastructure)基礎之上的產生和確定數字證書的第三方可信機構,主要進行身份證書的發放,並按照設計者指定的策略。管理電子證書的正常使用。
    2. HTTP超文字傳輸是明文傳輸,HTTPS是具有SSL加密傳輸協議
    3. HTTP使用80埠,HTTPS使用的是443埠
    4. HTTP連線簡單無狀態。HTTPS協議是 SSL + HTTP 協議構建的可進行加密傳輸、身份認證的網路協議,比HTTP安全。
        SSL:(Secure Sockets Layer 安全套接層)及其繼承者 傳輸層安全 (Transport Later Security,TLS)是為了網路通訊提供安全及資料完整性的一種安全協議。TLS和SSL在傳輸層對網路連線進行加密。

HTTP的缺點:

  1. 通訊內容為明文,未加密,內容可能會被監聽:監聽可能發生在網際網路通訊中的各個環節
  2. 通訊雙方沒有身份驗證,可能出現偽裝身份的情況,所有人都可以對伺服器發起請求
        可以發現,對客戶端而言,沒有辦法確定伺服器是否是真的伺服器,對於伺服器來說,又無法確定自己返回的報文是否真正的被客戶端接收到。
    這裡寫圖片描述
        所以,伺服器的全盤接收的缺點很容易被用來驚醒DOS攻擊。
        以客戶端為例,客戶端在於服務端通訊之前需要確定伺服器的身份,該身份是一張證書,該證書由值得信賴的第三方頒發,客戶端在確認身份之後才進行通訊。
  3. 接收的報文的完整性無法確定,可能中途被改動。
    這裡寫圖片描述
    伺服器在接收到請求之後,會進行響應。但伺服器和客戶端無法知道報文在途中的傳輸是否出現問題。很有可能在傳輸時被其他攻擊者進行篡改,報文的完整性遭到破壞。

關於HTTPS

HTTPS就是在發現HTTP缺點的基礎上,在HTTP不足的地方給予加強,HTTPS在HTTP的基礎上增加了:
    · 通訊加密
    · 證書完整
    · 完整性保護

    SSL是如何配合HTTP來達到安全通訊的?
        首先我們必須知道的是HTTPS不是一個新的協議,HTTP的通訊介面部分採用了SSL協議實現。
這裡寫圖片描述
從上面的圖片我們可以看出,SSL是獨立於HTTP協議的,它同樣也可以用於其他協議的加密,如SMTP。

普遍的加密方式

    · 共享金鑰加密(對稱金鑰)
    顧名思義,就是客戶端和服務端都擁有一把相同的鑰匙,對報文的加密和解密都是用的同意把鑰匙,而金鑰也需要在通訊過程中發給對方,對方才能使用這把金鑰來解密。所以,一旦傳輸的過程中這把鑰匙被攻擊者獲取,報文加密也就失去了意義。
這裡寫圖片描述

    · 公開金鑰加密
    共享金鑰存在著一個很大的問題就是,如何讓才能把這把鑰匙安全的傳送給對方。而公開金鑰則很好的解決了這個問題。
    公開金鑰加密使用的非對稱金鑰。一把是公有金鑰,一把是私有金鑰。公有金鑰是對通訊雙方公開的,任何人都可以獲取,而私有的則不公開。傳送方使用這把公有金鑰對報文進行加密,接收方則使用私有的金鑰進行解密。
這裡寫圖片描述

HTTPS採用混合加密機制

    由於公有金鑰的機制相對比較複雜,導致其處理速度相對較慢。HTTPS首先是通過公有金鑰來對共享金鑰進行加密傳輸。當共享金鑰安全的傳輸給對方之後,雙方則使用共享金鑰的方式來加密報文,提高效率。

HTTPS的握手機制:

    1. 客戶端(瀏覽器)引起HTTP請求,請求連線服務端,傳送支援的加密通訊協議(和版本),並且生成一個隨機數,後續用於生成“對話金鑰”。
    2. 服務端確認加密通訊協議(和版本),同時生成一個隨機數,後續用於生成“對話金鑰”,並且將CA頒發的數字證書,一起傳送給客戶端。
    3. 客戶端收到數字證書後,檢測內建的“受信任的根證書頒發機構”,檢視解開數字證書的公匙是否存在。
    4. 如果解開數字證書的公匙存在,則使用它解開數字證書,得到正確的伺服器公匙,同時再次生成一個隨機數,用於伺服器公匙加密,併發送給伺服器。
    5. 此時本地和伺服器同時將三個隨機數,根據約定的加密方法進行加密,各自生成本次會話所使用的同一把“會話金鑰”。
    6. 到這裡,認證階段已經完畢,資料傳輸從 非對稱加密 換成了 對稱加密(因為考慮到效能),接下來所有的資料傳輸都是使用HTTP協議進行傳輸,只不過使用了“會話金鑰”來加密內容。

圖解

這裡寫圖片描述

如何選擇HTTP和HTTPS

    SSL會使通訊的效率降低
        ·通訊速率降低:HTTPS除了TCP連線,傳送請求、響應之外,還需要SSL通訊。整體的通訊資訊量增加。
        ·加密過程消耗資源:每個報文都需要進行加密和解密的運算處理。比起HTTP會消耗更多的伺服器資源。
        ·證書開銷:如果想要通過HTTPS進行通訊,就必須向認證機構購買證書。
    基於上面的三點,如果我們再通訊中傳輸的是非敏感的資訊,則會較多的選擇HTTP協議。而當通訊過程中會涉及到個人隱私或其他安全資訊時,則會選擇HTTPS。當然,訪問量也是考慮的因素之一,如果訪問量很大,對每個報文都進行加密解密,也會給伺服器帶來很大的負擔。