HTTP是互聯網中應用最為廣泛的一種網絡協議,在進入正文之前,先解釋什么是網絡協議?網絡協議為計算機網絡中進行數據交換而建立的規則、標准或約定的集合。網絡協議是由以下三個要素組成:語義、語法、時序。國際標准化組織(ISO)在1978年提出了“開放系統互聯參考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它將計算機網絡體系結構的通信協議划分為七層,自下而上依次為:物理層(Physics Layer)、數據鏈路層(Data Link Layer)、網絡層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應用層(Application Layer)。其中每一層都規定有明確的服務及接口標准;把用戶的應用程序作為最高層;除了最高層外,中間的每一層都向上一層提供服務,同時又是下一層的用戶。另外還有一種參考模型,TCP/IP參考模型(TCP/IP Reference Model)。是首先由ARPANET所使用的網絡體系結構。這個體系結構在它的兩個主要協議出現以后被稱為TCP/IP參考模型。這一網絡協議共分為四層:網絡訪問層、互聯網層、傳輸層和應用層。需要注意的一點是,TCP/IP協議不是TCP和IP這兩個協議的合稱,而是指因特網整個TCP/IP協議族。
下面一幅圖解釋兩種分層之間對應關系:

從上圖中可以看出,HTTP是應用層中的一種協議。那么HTTP到底是什么呢?
HTTP,超文本傳輸協議(HyperText Transfer Protocol)
HTTP是一個客戶端和服務器端請求和應答的標准。HTTP是客戶端瀏覽器或其他程序與Web服務器之間的應用層通信協議。在Internet上的Web服務器上存放的都是超文本信息,客戶機需要通過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,不僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通信,從而實現各類應用資源超媒體訪問的集成。

通常HTTP消息包括客戶機向服務器的請求消息和服務器向客戶機的響應消息。這兩種類型的消息由一個起始行,一個或者多個頭域,一個指示頭域結束的空行和可選的消息體組成。HTTP的頭域包括通用頭,請求頭,響應頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴展為多行,在每行開始處,使用至少一個空格或制表符。
HTTP通信的基本單位是報文,HTTP報文由從客戶機到服務器的請求和從服務器到客戶機的響應構成。包括請求報文和響應報文。請求報文格式如下:
請求行 - 通用信息頭 - 請求頭 - 實體頭 - 報文主體

請求行以方法字段開始,后面分別是 URL 字段和 HTTP 協議版本字段,並以 CRLF 結尾。
響應報文格式如下:
狀態行 - 通用信息頭 - 響應頭 - 實體頭 - 報文主體
其中狀態碼元由3位數字組成,表示請求是否被理解或被滿足。
狀態碼

常見的狀態碼對應的含義
HTTP請求方法包括GET、POST、PUT、DELETE、PATCH、HEAD、
OPTIONS、TRACE。其中GET和POST最為常用。
GET和POST的區別
從語義角度來說,GET是從指定的資源請求數據,POST是向指定的資源提交要被處理的數據。通俗點將,GET是獲取數據,POST是更新數據。
具體區別可以大致總結為一下幾點:
(1) GET的URL可見,POST的URL不可見;
(2) GET請求可以被緩存,POST不會被緩存;
(3) GET請求可以保留在瀏覽器歷史記錄中,POST不會;
(4) GET請求有長度限制,2048個字節,POST長度沒有限制;
(5) GET請求是冪等性的,POST是非冪等性的;
(6) GET請求的安全性沒有POST高。
HTTP連接流程
在Http工作之前,Web瀏覽器通過網絡和Web服務器建立鏈連接,該連接是通過TCP來完成的,上文說過,TCP協議和IP共同組成了Internet,即著名的TCP/IP協議族,HTTP是比TCP更高的應用層協議,一般TCP接口的端口號是80。
TCP被稱為“面向連接”的傳輸層協議,需知道的是,傳輸層主要有兩個協議,分別是 TCP 和 UDP。
下面一張圖來解釋TCP連接流程:

三次握手:第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與服務器開始傳送數據。
四次揮手:第一次握手:TCP發送一個FIN(結束),用來關閉客戶到服務端的連接。
第二次握手:服務端收到這個FIN,他發回一個ACK(確認),確認收到 序號為收到序號+1,和SYN一樣,一個FIN將占用一個序號。
第三次握手:服務端發送一個FIN(結束)到客戶端,服務端關閉客戶端的連接。
第四次握手:客戶端發送ACK(確認)報文確認,並將確認的序號+1,這樣關閉完成。
延伸思考:TCP和DUP的區別?
HTTPS(:Hyper Text Transfer Protocol over Secure Socket Layer)
HTTPS是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP+SSL/TSL
HTTPS使用端口443,而不是象HTTP那樣使用端口80來通信。
SSL使用40位關鍵字作為RC4流加密算法,這對於商業信息的加密是合適的。

HTTPS的建立流程
(1)客戶使用https的URL訪問服務器,要求與服務器建立SSL連接。
(2)服務器收到客戶端請求后,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
(3)客戶端的瀏覽器與服務器開始協商SSL連接的安全等級,也就是信息加密的等級。
(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然后利用網站的公鑰將會話密鑰加密,並傳送給網站。
(5)服務器利用自己的私鑰解密出會話密鑰。
(6)服務器利用會話密鑰加密與客戶端之間的通信。
如下圖所示:

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
參考鏈接:https://www.jianshu.com/p/c5eb856d63eb