
一、HTTP
HTTP(超文本傳輸協議,HyperText Transfer Protocol)是應用層的協議,目前在互聯網中應用廣泛。
它被設計用於Web瀏覽器和Web服務器之間的通信,但它也可以用於其他目的。 HTTP遵循經典的客戶端-服務端模型
,客戶端打開一個連接以發出請求,然后等待它收到服務器端響應。 HTTP是
無狀態協議,意味着服務器不會在兩個請求之間保留任何數據(狀態)。
二、HTTP1.0 ——構建可擴展性
HTTP原有的應用非常局限,瀏覽器和服務器迅速擴展使其用途更廣:
-
版本信息現在會隨着每個請求發送(HTTP1.0 被追加到GET行)
-
狀態代碼行也會在響應開始時發送,允許瀏覽器本身了解請求的成功或失敗,並相應地調整其行為(如以特定方式更新或使用本地緩存)
-
引入了HTTP頭的概念,無論是對於請求還是響應,允許傳輸元數據,並使協議非常靈活和可擴展。
-
在新的HTTP頭的幫助下,增加了傳輸除純文本HTML文件外的其他類型文檔的能力。(感謝 Content-Type頭)。
同時還開始支持一種被稱為keep-alive
連接的早期實驗性持久連接,下圖顯示了keep-alive連接的一些性能優點,圖中將在串行連接上實現4個HTTP事務的時間線與在一條持久連接上實現同樣事務所需要的時間線進行了比較。由於去除了進行連接和關閉連接的開銷,所以時間有所縮短。

必須發送一個connection:Keep-Alive
請求首部來激活keep-alive
連接
三、HTTP1.1 ——標准化的協議
HTTP/1.0的多種不同的實現運用起來有些混亂,HTTP1.1是第一個標准化版本,重點關注的是校正HTTP設計中的結構性缺陷:
-
連接可以重復使用,節省了多次打開它的時間,以顯示嵌入到單個原始文檔中的資源。
-
增加流水線操作,允許在第一個應答被完全發送之前發送第二個請求,以降低通信的延遲。
-
支持響應分塊。
-
引入額外的緩存控制機制。
-
引入內容協商,包括語言,編碼,或類型,並允許客戶端和服務器約定以最適當的內容進行交換。
-
感謝 Host 頭,能夠使不同的域名配置在同一個IP地址的服務器。
-
安全性得到了提高
在http1.1中,client和server都是默認對方支持長鏈接的, 如果不希望使用長鏈接,則需要在header中指明connection:close;
四、HTTP2.0——為了更優異的表現
HTTP/2在HTTP/1.1有幾處基本的不同:
- HTTP2是二進制協議而不是文本協議。不再可讀和無障礙的手動創建,改善的優化技術現在可被實施。
- 這是一個復用協議。並行的請求能在同一個鏈接中處理,移除了HTTP/1.x中順序和阻塞的約束。
- 壓縮了headers。因為headers在一系列請求中常常是相似的,其移除了重復和傳輸重復數據的成本。
- 其允許服務器在客戶端緩存中填充數據,通過一個叫服務器推送的機制來提前請求。
五、HTTPS
HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全。為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。現在的HTTPS都是用的TLS協議,但是由於SSL出現的時間比較早,並且依舊被現在瀏覽器所支持,因此SSL依然是HTTPS的代名詞。

HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不僅僅是一套加密傳輸的協議,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。