學習一門技術或者看一篇文章最好的方式就是帶着問題去學習,這樣才能在過程當中有茅塞頓開、燈火闌珊的感受,記憶也會更深入。web
HTTP 全稱是 HyperText Transfer Protocal ,即:超文本傳輸協議,從 1990 年開始就在 WWW 上普遍應用,是現今在 WWW 上應用最多的協議,HTTP 是應用層協議,當你上網瀏覽網頁的時候,瀏覽器和 web 服務器之間就會經過 HTTP 在 Internet 上進行數據的發送和接收。HTTP 是一個基於請求/響應模式的、無狀態的協議。即咱們一般所說的 Request/Response。瀏覽器
首先看一張圖緩存
若是對網絡協議還不太熟悉的同窗,建議看一下上一篇文章 Android 網絡基礎之網絡協議篇安全
請求行 <method> <request-url> <version>
請求頭 <headers>
請求體 <entity-body>
複製代碼
響應狀態行 <version> <status> <reason-phrase>
響應頭 <headers>
響應體 <entity-body>
複製代碼
解釋一下各個標籤:bash
<method> 指請求方法,經常使用的主要是 Get、 Post、Head 還有其餘一些咱們這裏就不說了,有興趣的能夠本身查閱一下
<version> 指協議版本,如今一般都是Http/1.1了
<request-url> 請求地址
<status> 指響應狀態碼, 咱們熟悉的200、404等等
<reason-phrase> 緣由短語,200 OK 、404 Not Found 這種後面的描述就是緣由短語,一般沒必要太關注。
複製代碼
列舉幾個比較經常使用的服務器
方法名 | 功能 |
---|---|
GET | 向指定的資源發出「顯示」請求,使用 GET 方法應該只用在讀取數據上,而不該該用於產生「反作用」的操做中 |
POST | 指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求文本中。這個請求可能會建立新的資源或者修改現有資源,或二者皆有。 |
PUT | 向指定資源位置上傳其最新內容 |
DELETE | 請求服務器刪除 Request-URI 所標識的資源 |
指請求報文和響應報文均可以使用的字段網絡
Http + 加密 + 認證 + 完整性保護 = Httpspost
傳統的 Http 協議是一種應用層的傳輸協議,Http 直接與 TCP 協議通訊。其自己存在一些缺點:學習
Http 協議使用明文傳輸,容易遭到竊聽。編碼
Http 對於通訊雙方都沒有進行身份驗證,通訊的雙方沒法確認對方是不是假裝的客戶端或者服務端。
Http 對於傳輸內容的完整性沒有確認的辦法,每每容易在傳輸過程當中被劫持篡改。
所以,在一些須要保證安全性的場景下,好比涉及到銀行帳戶的請求時,Http 沒法抵禦這些攻擊。
Https 則能夠經過增長的 SSL\TLS,支持對於通訊內容的加密,以及對通訊雙方的身份進行驗證。
近代密碼學中加密的方式主要有兩類:
對稱祕鑰加密是指加密與解密過程使用同一把祕鑰。這種方式的優勢是處理速度快,可是如何安全的從一方將祕鑰傳遞到通訊的另外一方是一個問題。
非對稱祕鑰加密是指加密與解密使用兩把不一樣的祕鑰。這兩把祕鑰,一把叫公開祕鑰,能夠隨意對外公開。一把叫私有祕鑰,只用於自己持有。獲得公開祕鑰的客戶端可使用公開祕鑰對傳輸內容進行加密,而只有私有祕鑰持有者自己能夠對公開祕鑰加密的內容進行解密。這種方式克服了祕鑰交換的問題,可是相對於對稱祕鑰加密的方式,處理速度較慢。
SSL\TLS 的加密方式則是結合了兩種加密方式的優勢。首先採用非對稱祕鑰加密,將一個對稱祕鑰使用公開祕鑰加密後傳輸到對方。對方使用私有祕鑰解密,獲得傳輸的對稱祕鑰。以後雙方再使用對稱祕鑰進行通訊。這樣即解決了對稱祕鑰加密的祕鑰傳輸問題,又利用了對稱祕鑰的高效率來進行通訊內容的加密與解密。
SSL\TLS 採用的混合加密的方式仍是存在一個問題,即怎麼樣確保用於加密的公開祕鑰確實是所指望的服務器所分發的呢?也許在收到公開祕鑰時,這個公開祕鑰已經被別人篡改了。所以,咱們還須要對這個祕鑰進行認證的能力,以確保咱們通訊的對方是咱們所指望的對象。
目前的作法是使用由數字證書認證機構頒發的公開祕鑰證書。服務器的運營人員能夠向認證機構提出公開祕鑰申請。認證機構在審覈以後,會將公開祕鑰與共鑰證書綁定。服務器就能夠將這個共鑰證書下發給客戶端,客戶端在收到證書後,使用認證機構的公開祕鑰進行驗證。一旦驗證成功,便可知道這個祕鑰是能夠信任的祕鑰。