對HTTP與HTTPS學習的筆記

  • 2020 年 2 月 17 日
  • 筆記

HTTP協議:Hypertext Transfer Protocol,超文本傳輸協議,現在普遍的版本為1.1版本

HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端伺服器模型。HTTP是一個無狀態的協議。

什麼是無狀態協議

在HTTP最開始的設計時時無狀態的,按照我查閱資料的理解為無法識別請求是第二次請求。兩次請求之間沒有聯繫,無上下文

也就是說對請求是無記憶性質的,再標準來說就是每次的請求,伺服器給的相應都是獨立的

而有狀態的請求就像cookie的功能一樣,伺服器認識你,有上下文的溝通

HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。 在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。 在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。 由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種「短連接」,要保持客戶端程式的在線狀態,需要不斷地向伺服器發起連接請求。通常的做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次「保持連接」的請求,伺服器在收到該請求後對客戶端進行回復,表明知道 客戶端「在線」。

若伺服器長時間無法收到客戶端的請求,則認為客戶端「下線」,若客戶端長時間無法收到伺服器的回復,則認為網路已經斷開。 HTTP是一個基於TCP/IP通訊協議來傳遞數據的協議,傳輸的數據類型為HTML 文件,、圖片文件, 查詢結果等

默認HTTP的埠號為80,HTTPS的埠號為443。

HTTP協議一般用於B/S架構()。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器發送所有請求

HTTP的幾個重要概念

連接:Connection

一個傳輸層的實際環流,它是建立在兩個相互通訊的應用程式之間。在http1.1,request和reponse頭中都有可能出現一個connection的頭,此header的含義是當client和server通訊時對於長鏈接如何進行處理。

在http1.1中,client和server都是默認對方支援長鏈接的, 如果client使用http1.1協議,但又不希望使用長鏈接,則需要在header中指明connection的值為close;

如果server方也不想支援長鏈接,則在response中也需要明確說明connection的值為close。

不論request還是response的header中包含了值為close的connection,都表明當前正在使用的tcp鏈接在當天請求處理完畢後會被斷掉。以後client再進行新的請求時就必須創建新的tcp鏈接了。

消息:Message

HTTP通訊的基本單位,包括一個結構化的八元組序列並通過連接傳輸。

請求:Request

一個從客戶端到伺服器的請求資訊包括應用於資源的方法、資源的標識符和協議的版本號。

響應:Response

一個從伺服器返回的資訊包括HTTP協議的版本號、請求的狀態(例如「成功」或「沒找到」)和文檔的MIME類型。

資源:Resource

由URI標識的網路數據對象或服務。

實體:Entity

數據資源或來自服務資源的回映的一種特殊表示方法,它可能被包圍在一個請求或響應資訊中。一個實體包括實體頭資訊和實體的本身內容。

客戶機:Client

一個為發送請求目的而建立連接的應用程式。

用戶代理:UserAgent

初始化一個請求的客戶機。它們是瀏覽器、編輯器或其它用戶工具。

伺服器:Server

一個接受連接並對請求返回資訊的應用程式。

源伺服器:Originserver

是一個給定資源可以在其上駐留或被創建的伺服器。

代理:Proxy

一個中間程式,它可以充當一個伺服器,也可以充當一個客戶機,為其它客戶機建立請求。請求是通過可能的翻譯在內部或經過傳遞到其它的伺服器中。一個代理在發送請求資訊之前,必須解釋並且如果可能重寫它。代理經常作為通過防火牆的客戶機端的門戶,代理還可以作為一個幫助應用來通過協議處理沒有被用戶代理完成的請求。

網關:Gateway

一個作為其它伺服器中間媒介的伺服器。與代理不同的是,網關接受請求就好象對被請求的資源來說它就是源伺服器;發出請求的客戶機並沒有意識到它在同網關打交道。網關經常作為通過防火牆的伺服器端的門戶,網關還可以作為一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。

通道:Tunnel

是作為兩個連接中繼的中介程式。一旦激活,通道便被認為不屬於HTTP通訊,儘管通道可能是被一個HTTP請求初始化的。當被中繼的連接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通訊時通道被經常使用。

快取:Cache

反應資訊的局域存儲。

這裡參考文獻

《HTTP協議學習系列–深入理解HTTP協議》;https://blog.csdn.net/fangaoxin/article/details/6936134

其狀態碼

參考菜鳥教程

HTTPS協議:Secure Hypertext Transfer Protocol,安全超文本傳輸協議

HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

HTTPS協議的主要作用可以分為兩種:一種是建立一個資訊安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。

HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全,為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。

HTTPS和HTTP的區別主要如下:

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

2、http是超文本傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

3、http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。

4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

雖然說HTTPS有很大的優勢,但其相對來說,還是存在不足之處的:

HTTPS協議握手階段比較費時,會使頁面的載入時間延長近50%,增加10%到20%的耗電;

HTTPS連接快取不如HTTP高效,會增加數據開銷和功耗,甚至已有的安全措施也會因此而受到影響;

SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用。

SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗。

HTTPS協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、伺服器劫持等方面幾乎起不到什麼作用。最關鍵的,SSL證書的信用鏈體系並不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。

參考文獻《http狀態碼、http與https區別》: https://blog.csdn.net/lijie45655/article/details/91359707