十分鐘搞懂HTTP和HTTPS協議?

1.什麼是協議?

網絡協議是計算機之間爲了實現網絡通訊而達成的一種「約定」或者」規則「,有了這種」約定「,不一樣廠商的生產設備,以及不一樣操做系統組成的計算機之間,就能夠實現通訊。程序員

2.HTTP協議是什麼?

HTTP協議是超文本傳輸協議的縮寫,英文是Hyper Text Transfer Protocol。它是從WEB服務器傳輸超文本標記語言(HTML)到本地瀏覽器的傳送協議。web

設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。算法

HTPP有多個版本,目前普遍使用的是HTTP/1.1版本。瀏覽器

3.HTTP原理

HTTP是一個基於TCP/IP通訊協議來傳遞數據的協議,傳輸的數據類型爲HTML 文件,、圖片文件, 查詢結果等。緩存

HTTP協議通常用於B/S架構()。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。安全

咱們以訪問百度爲例:服務器


訪問百度流程

4.HTTP特色

  1. http協議支持客戶端/服務端模式,也是一種請求/響應模式的協議。
  2. 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。
  3. 靈活:HTTP容許傳輸任意類型的數據對象。傳輸的類型由Content-Type加以標記。
  4. 無鏈接:限制每次鏈接只處理一個請求。服務器處理完請求,並收到客戶的應答後,即斷開鏈接,可是卻不利於客戶端與服務器保持會話鏈接,爲了彌補這種不足,產生了兩項記錄http狀態的技術,一個叫作Cookie,一個叫作Session。
  5. 無狀態:無狀態是指協議對於事務處理沒有記憶,後續處理須要前面的信息,則必須重傳。

5.URI和URL的區別

HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。網絡

  • URI:Uniform Resource Identifier 統一資源標識
  • URL:Uniform Resource Location 統一資源定位

URI 是用來標示 一個具體的資源的,咱們能夠經過 URI 知道一個資源是什麼。架構

URL 則是用來定位具體的資源的,標示了一個具體的資源位置。互聯網上的每一個文件都有一個惟一的URL。post

6.HTTP報文組成

請求報文構成

  1. 請求行:包括請求方法、URL、協議/版本
  2. 請求頭(Request Header)
  3. 請求正文
請求報文組成

響應報文構成

  1. 狀態行
  2. 響應頭
  3. 響應正文
響應報文組成

7.常見請求方法

  • GET:請求指定的頁面信息,並返回實體主體。
  • POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。
  • HEAD:相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
  • PUT:從客戶端向服務器傳送的數據取代指定的文檔的內容。
  • DELETE:請求服務器刪除指定的頁面。

get請求

GET請求

post請求

POST請求

post和get的區別:

  • 都包含請求頭請求行,post多了請求body。
  • get多用來查詢,請求參數放在url中,不會對服務器上的內容產生做用。post用來提交,如把帳號密碼放入body中。
  • GET是直接添加到URL後面的,直接就能夠在URL中看到內容,而POST是放在報文內部的,用戶沒法直接看到。
  • GET提交的數據長度是有限制的,由於URL長度有限制,具體的長度限制視瀏覽器而定。而POST沒有。

8.響應狀態碼

訪問一個網頁時,瀏覽器會向web服務器發出請求。此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭用以響應瀏覽器的請求。

狀態碼分類

  • 1XX- 信息型,服務器收到請求,須要請求者繼續操做。
  • 2XX- 成功型,請求成功收到,理解並處理。
  • 3XX - 重定向,須要進一步的操做以完成請求。
  • 4XX - 客戶端錯誤,請求包含語法錯誤或沒法完成請求。
  • 5XX - 服務器錯誤,服務器在處理請求的過程當中發生了錯誤。

常見狀態碼

  • 200 OK - 客戶端請求成功
  • 301 - 資源(網頁等)被永久轉移到其它URL
  • 302 - 臨時跳轉
  • 400 Bad Request - 客戶端請求有語法錯誤,不能被服務器所理解
  • 401 Unauthorized - 請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用
  • 404 - 請求資源不存在,多是輸入了錯誤的URL
  • 500 - 服務器內部發生了不可預期的錯誤
  • 503 Server Unavailable - 服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。

9.爲何要用https?

實際使用中,絕大說的網站如今都採用的是https協議,這也是將來互聯網發展的趨勢。下面是經過wireshark抓取的一個博客網站的登陸請求過程。

博客登陸抓包

能夠看到訪問的帳號密碼都是明文傳輸, 這樣客戶端發出的請求很容易被不法分子截取利用,所以,HTTP協議不適合傳輸一些敏感信息,好比:各類帳號、密碼等信息,使用http協議傳輸隱私信息很是不安全。

通常http中存在以下問題:

  • 請求信息明文傳輸,容易被竊聽截取。
  • 數據的完整性未校驗,容易被篡改
  • 沒有驗證對方身份,存在冒充危險

10.什麼是HTTPS?

爲了解決上述HTTP存在的問題,就用到了HTTPS。

HTTPS 協議(HyperText Transfer Protocol over Secure Socket Layer):通常理解爲HTTP+SSL/TLS,經過 SSL證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊進行加密。

那麼SSL又是什麼?

SSL(Secure Socket Layer,安全套接字層):1994年爲 Netscape 所研發,SSL 協議位於 TCP/IP 協議與各類應用層協議之間,爲數據通信提供安全支持。

TLS(Transport Layer Security,傳輸層安全):其前身是 SSL,它最初的幾個版本(SSL 1.0、SSL 2.0、SSL 3.0)由網景公司開發,1999年從 3.1 開始被 IETF 標準化並更名,發展至今已經有 TLS 1.0、TLS 1.一、TLS 1.2 三個版本。SSL3.0和TLS1.0因爲存在安全漏洞,已經不多被使用到。TLS 1.3 改動會比較大,目前還在草案階段,目前使用最普遍的是TLS 1.一、TLS 1.2。

SSL發展史(互聯網加密通訊)

  1. 1994年NetSpace公司設計SSL協議(Secure Sockets Layout)1.0版本,但未發佈。
  2. 1995年NetSpace發佈SSL/2.0版本,很快發現有嚴重漏洞
  3. 1996年發佈SSL/3.0版本,獲得大規模應用
  4. 1999年,發佈了SSL升級版TLS/1.0版本,目前應用最普遍的版本
  5. 2006年和2008年,發佈了TLS/1.1版本和TLS/1.2版本

11.瀏覽器在使用HTTPS傳輸數據的流程是什麼?


HTTPS數據傳輸流程
  1. 首先客戶端經過URL訪問服務器創建SSL鏈接。
  2. 服務端收到客戶端請求後,會將網站支持的證書信息(證書中包含公鑰)傳送一份給客戶端。
  3. 客戶端的服務器開始協商SSL鏈接的安全等級,也就是信息加密的等級。
  4. 客戶端的瀏覽器根據雙方贊成的安全等級,創建會話密鑰,而後利用網站的公鑰將會話密鑰加密,並傳送給網站。
  5. 服務器利用本身的私鑰解密出會話密鑰。
  6. 服務器利用會話密鑰加密與客戶端之間的通訊。

12.HTTPS的缺點

  • HTTPS協議屢次握手,致使頁面的加載時間延長近50%;
  • HTTPS鏈接緩存不如HTTP高效,會增長數據開銷和功耗;
  • 申請SSL證書須要錢,功能越強大的證書費用越高。
  • SSL涉及到的安全算法會消耗 CPU 資源,對服務器資源消耗較大。

13.總結HTTPS和HTTP的區別

  • HTTPS是HTTP協議的安全版本,HTTP協議的數據傳輸是明文的,是不安全的,HTTPS使用了SSL/TLS協議進行了加密處理。
  • http和https使用鏈接方式不一樣,默認端口也不同,http是80,https是443。

歡迎關注公衆號【吾非同】,關注測試技術、Python知識、程序員資源、職場成長

相關文章
相關標籤/搜索