簡介
HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。HTTP協議是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。
HTTP是一個應用層協議,由請求和響應構成,是一個標准的客戶端服務器模型。HTTP是一個無狀態的協議。
在TCP/IP協議棧中的位置
HTTP協議通常承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS。

HTTP協議通常承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS。
HTTP的請求響應模型
HTTP協議永遠都是客戶端發起請求,服務器回送響應。

這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
HTTP協議是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關系。
http協議的主要特點
(1)無狀態
http協議無狀態協議。無狀態是指協議對於事物處理沒有記憶能力。缺少記憶,意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次傳送的數據量比較大。
HTTP協議的無狀態是指服務器的協議層無需為不同的請求之間建立相關關系,它特指的是協議層。但這並不代表建立在HTTP協議之上的應用程序就無法維持狀態。應用層可以通過會話session來跟蹤用戶請求之間的關聯性,服務器會為每一個會話對象綁定一個唯一的會話ID,瀏覽器可以將會話ID記錄在本地緩存LocalStroage或者Cookie,在后續的請求帶上這個會話ID,服務器就可以為每個請求找到之前的會話狀態。
(2)長連接
HTTP早期版本中每個請求都會發起一個連接,一個網頁除了html還有其他靜態資源以及諸多的API調用,如果每個請求都一個連接,這是非常浪費服務器資源的,同時也讓客戶端的訪問速度慢了不少。
HTTP1.0之后引入了Keep-Alive持久連接,HTTP1.1之后默認為持久連接。它使得HTTP的一個連接可以連續服務多個請求,有效節省了資源,增加了客戶端的訪問速度。
但是,持久連接也不是一直連接,畢竟每個連接都會占用服務器資源,如果打開網頁的人太多,那服務器的資源也會緊張,所以一般服務器會配置一個KeepAlive Timeout參數和KeepAlive Requests參數限制單個連接持續時長和最多服務的請求次數。
HTTP常見的狀態碼有哪些
200:請求被正常處理
301:永久重定向
302:臨時重定向
304:資源被瀏覽器緩存了,不需要請求服務器(打開經常訪問的網站)
400:用於參數驗證,一般是少參數了或者參數錯誤
403:資源禁止訪問,IP被列入黑名單了
404:服務器無法找到對應的資源
500:服務器內部錯誤
502:后端服務掛掉或者服務器壓力過大,nginx接到的請求無法及時傳遞給后端的服務處理,這個時候就會出現502錯誤。
HTTP的缺點和HTTPS
HTTP的缺點:
(1)通信使用明文不加密,內容可能會被竊聽
(2)不驗明對方身份,可能遇到偽裝
(3)無法驗證報文完整性,可能遭到篡改
HTTPS就是HTTP加上加密處理(一般是SSL安全通信線路)+ 認證 + 完整性保護。
