網絡協議核心-Http和Https

本文由 CrazyDailyQuestionhappyburglar,liu1813565583,MicroKibaco等共同創做.html

引言

  2014年之前,除了某些商務網站之外,大多數網站依舊使用的是Http請求,以後,Google開始推崇開發人員使用Https,做爲Https切換時機,Google宣佈給Https請求的網址做爲優先排名,目的是給沒有切換Https的網站給予懲罰,那爲何Https會那麼重要呢?從Http切換到Https真的值得嗎?而後Http和Https的區別又是什麼呢?如下指南會解決你全部的疑問,他能夠回答這些常見問題,還能更好的讓您瞭解Http和Https。java

HttpVsHttp

一. Http

1. 什麼是Http

  http英文是 Hypertext Transfer Protocol,一種網絡傳輸協議,位於 TCP/IP 協議族的最頂層。
  http在tcp/ip模型中,屬於最上層--應用層,tcp/ip是自底向上的分層模型。分別爲應用層<--傳輸層<-<-網絡層<--數據鏈路層。
  其中應用層包括咱們常用的http協議,ffp文件協議,Dns域名解析協議,DHCP動態主機鏈接協議等等;
  傳輸層有面向鏈接的tcp協議和麪向無鏈接的udp協議。
  tcp鏈接要通過三次握手才能真正創建鏈接開始通訊,所以,tcp的鏈接是穩定的,可靠的傳輸協議;
  缺點也顯而易見,就是針對高性能需求的網絡場景,如直播,遊戲團戰等能力不足,在這些場景可使用Udp協議,udp協議是面向無鏈接的,無序的,不可靠的,正是由於「面向無鏈接」,省去了三次握手的鏈接創建時間,纔有了「高性能」的特性。
  網絡層即Ip層,Ip層是面向無鏈接的,對這一層瞭解不太深刻。
  數據鏈路層,我理解就是真實的硬件設備,包括路由器,AP,雙絞線, 真實物理主機之間的鏈接過程。git

Http

2. Http如何工做的

  1. dns解析,域名對應 ip
  2. TCP創建鏈接,三次握手
  3. C端向S端發送請求行命令
  4. C端發送請求頭信息
  5. S端應答,發送響應命令
  6. S端發送響應頭信息
  7. S端向C端發送數據,以及消息體
  8. S端關閉連接 tcp 四次揮手

3. 如何實現WebView 和 Http Cookie共享?

  首先很抱歉的告訴你們,Android原生Http沒有任何與WebView共享Cookie機制,若是你使用的是系統的httpClient,你須要手動建立cookieManager,確保之後能訪問他,在OkHttp是這麼操做的github

OkHttpClient client = new OkHttpClient().setCookieHandler(new WebviewCookieHandler());
複製代碼

二. Https

  Https ,說白了就是 Http + SSL ,即加密通訊後的Http
  其本質是在客戶端和服務端協商一套對稱祕鑰,注意哦:是用非對稱算法協商的對稱祕鑰,不涉及祕鑰的傳輸,每次發送以前再拿這個密鑰對內容進行對稱加密,收到以後達到內容的加密傳輸。
   那麼使用https必定是安全的嗎?
  實際上是不必定的,由於有一些網站會使用自籤ssl證書,自簽證書不受任何監管,自籤ssl證書容易被僞造和假冒。
   即便用https,也可使用信任跟證書抓包的方式破解ssl的傳輸加密,因此使用https的同時,也要對內容進行二次加密,保證即便傳輸加密無效了,也那不到真正的傳輸內容。 web

Https

Https創建過程

  客戶端發送消息給服務端 ,服務端接受這個消息會判斷這個消息是否是可信的.
  因此會創建一個信任機制,這個信任機制就是咱們所說的證書.證書一旦肯定,客戶端收到通知,會將消息內容進行對稱加密.一樣服務端會拿到協商的祕鑰進行解密操做,整個Https鏈接創建. 算法

借鑑 HenCoderPlus 網紅圖

三. Https 爲何 比 Http安全?

  http是明文傳輸,在傳輸過程當中是很是不安全的,https須要去申請證書,通常免費的證書不多,因此須要必定的費用。
  在咱們app進行Http請求的時候,其實是咱們的瀏覽器或者咱們的軟件把咱們的報文發送到咱們的服務器上,服務端收到報文響應給咱們客戶端。
  中間經過中間節點進行消息轉發過程當中,消息是原封不動的到達咱們服務器,那麼消息能夠被篡改或者竊聽等操做,好比帳號密碼或者轉帳操做就是有風險的,明文傳輸會帶來一系列問題。
  因此使用Https加密處理,進行對稱加密,非對稱加密和hash算法以後再傳輸。
  可是加密會影響性能,尤爲是非對稱加密,因此Https比Http要慢,可是加密不必定100%安全。
  因此Https還會對通訊進行驗證,經過證書機制,Https知道真正訪問的真實對象,Https使用了一個TLS的安全層,他本質是讓Http運行在這個安全層上的。json

四.Status Code 狀態碼

三位數字,用於對響應結果作出類型化描述(如[獲取成功] [內容爲找到])api

返回碼 意義 示例
1xx 臨時性消息 100(繼續發送),101(正在切換協議)
2xx 成功 200(OK),201(建立成功)
3xx 重定向 301(永久移動),302(暫時移動),304(內容未改變)
4xx 客戶端錯誤 400(客戶端請求錯誤),401(認證失敗),403(被禁止)404(找不到內容)
5xx 服務器錯誤 500(服務器內部錯誤)

五.Request Method 請求方法

方法 做用
GET 1.用於獲取服務器資源 2.對服務器數據不進行修改 3.不發送 Body
POST 1. 用於增長或修改資源 2.發送給服務器的內容在Body 裏面
PUT 1.用於增長或修改資源 2.發送給服務器內容寫在Body裏面
DELETE 1.用於刪除資源 2.不發送Body
HEAD 1.和 GET 使用方法徹底相同 2.和 GET 惟一區別在於,返回的響應中沒有Body

六.ContentType

指定 Body 類型瀏覽器

類型 場景
text/html 請求Web頁面返回響應類型,Body中返回html文本
x-www-form-urlencoded web 頁面純文本表單提交方式
multipart/form-data web中有二進制文件的提交方式
application/json , image/jpeg , application/zip 單項內容(文本或非文本均可以),用於 Web api 響應 或者 POST/PUT 的請求

總結

  看完這篇文章後,你是如何看待Http和Https的區別以及它們之間的優劣呢?若是你還有其餘疑問歡迎到咱們的每日一問留言。安全

相關文章
相關標籤/搜索