http/https都是基於tcp/ip上的一種應用層傳輸協議。
組成
http由URL,header和body組成。
- URL
其中URL包含目標地址和請求方法,請求參數
- header
header包含一些配置參數,其中都是使用鍵值對傳遞,每一對之間需要換行。
傳遞格式爲:
Content-Encoding: gzip\r\n
- body
對傳遞的數據的格式沒有具體要求。一般使用者自定義數據格式。
get和post的區別
對於在瀏覽器之間使用時候,二者卻別如下:
- post請求會發送兩次,第一次將header發送給服務,如果返回200,纔會繼續發送body,但不是所有瀏覽器都是這樣,Firefox就只發送一次。
- get會給瀏覽器產生緩衝,URL後的參數可以被看到,不安全,post不會。
對於在移動設備使用,我們只是單純的訪問API接口時,本質上兩者並無差異,我們可以使用post時候,在URL後邊加上參數,也可以使用get時候,將一些請求數據放在body中。
不過日常使用中,可能會有一些規範,請求API,爲了獲取某些單一數據請求數據單一且少的情況下使用get,其他情況使用post。
https
https比http多了一層tls/ssl認證,這樣可以保證傳輸過程中的數據是加過密的。
HTTPS也分爲單項認證和雙向認證。
- 單向認證
單向認證是客戶端驗證服務器的可靠性
1. 客戶端把自己的SSL協議版本號,加密算法種類,隨機數等發給服務端
2. 服務端給客戶端返回自己的證書
3. 客戶端使用證書驗證服務端合法性[證書是否過期,頒發者是否有效,簽名是否一致等信息]
4. 驗證通過後,客戶端把自己支持的所有對稱加密方式發送給服務端
5. 服務端選擇最高級加密方案返回給客戶端
6. 客戶端生成對應加密密鑰隨機數,並使用服務端證書公鑰加密發送給服務端
7. 服務端使用私鑰解密獲取到密鑰,之後的會話中都會使用該密鑰來進行加解密。
- 雙向認證
雙向認證是客戶端和服務器互相驗證對方的可靠性
http和https區別
- http由於不需要認證連接,傳輸時間快,https由於需要連接認證,傳輸時間慢
- https傳輸的數據都是密文,而http是明文
- https需要在服務端配置證書,並且該證書一般都是需要花錢的,需要成本。