搜尋
首頁web前端html教學一次性搞懂 HTTP、HTTPS、SPDY、HTTP2


這篇文章帶給大家的內容是關於一次性搞懂HTTP、HTTPS、SPDY、HTTP2,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

一次性搞懂 HTTP、HTTPS、SPDY、HTTP2

作為網路通訊協定的一員老將,HTTP 協定走到今天已經經歷了三次版本的變動,現在最新的版本是HTTP2.0,相信大家早已耳熟能詳。今天就來跟大家好好介紹一下 HTTP 的前世今生。

HTTP/0.9

HTTP 的最早版本誕生在1991 年,這個最早版本和現在比起來極其簡單,沒有HTTP 頭,沒有狀態碼,甚至版本號也沒有,後來它的版本號碼才被定為0.9 來和其他版本的HTTP 區分。 HTTP/0.9 只支援一種方法- Get,請求只有一行。

GET /hello.html
回應也是非常簡單的,只包含 html 文件本身。

<HTML>
Hello world
</HTML>

當 TCP 建立連線之後,伺服器會向客戶端傳回 HTML 格式的字串。發送完畢後,就關閉 TCP 連線。由於沒有狀態碼和錯誤代碼,如果伺服器處理的時候發生錯誤,只會傳回一個特殊的包含問題描述資訊的 HTML 檔案。這就是最早的 HTTP/0.9 版本。

HTTP/1.0

1996 年,HTTP/1.0 版本發布,大大豐富了HTTP 的傳輸內容,除了文字,還可以傳送圖片、影片等,這為互聯網的發展奠定了基礎。相較於HTTP/0.9,HTTP/1.0 主要有以下特性:

請求與回應支援HTTP 頭,增加了狀態碼,回應物件的一開始是回應狀態行

協定版本訊息需要隨著請求一起傳送,支援HEAD,POST 方法

支援傳輸HTML 檔案以外其他類型的內容

一個典型的HTTP/1.0 的請求像這樣:

GET /hello.html HTTP/1.0
User-Agent:NCSA_Mosaic/2.0(Windows3.1)
200 OK
Date: Tue, 15 Nov 1996 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
一个包含图片的页面
<img  src="/static/imghwm/default1.png"  data-src="/smile.gif"  class="lazy" alt="一次性搞懂 HTTP、HTTPS、SPDY、HTTP2" >
</HTML>

HTTP/1.1


#在HTTP/1.0 發布幾個月後,HTTP/1.1 就發布了。 HTTP/1.1 更多的是作為對HTTP/1.0 的完善,在HTTP1.1 中,主要具有如下改進:

#可以復用連接

增加pipeline:HTTP 管線化是將多個HTTP 請求整批提交的技術,而在傳送過程中不需先等待服務端的回應。管線化機制須透過永久連接(persistent connection)完成。瀏覽器將HTTP請求大批提交可大幅縮短頁面的載入時間,特別是在傳輸延遲(lag/latency)較高的情況下。有一點要注意的是,只有冪等的請求可以使用 pipeline,如 GET,HEAD 方法。

chunked 編碼傳輸:此編碼將實體分塊傳送並逐塊標明長度,直到長度為0 塊表示傳輸結束, 這在實體長度未知時特別有用(例如由資料庫動態產生的資料)

引入更多快取控制機制:如etag,cache-control

引入內容協商機制,包括語言,編碼,類型等,並允許客戶端和伺服器之間約定以最合適的內容進行交換

請求訊息和回應訊息都支援Host 頭域:在HTTP1.0 中認為每台伺服器都綁定一個唯一的IP 位址,因此,請求訊息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一台實體伺服器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共用一個 IP 位址。因此,Host 頭的引進就很有必要了。

新增了OPTIONS,PUT, DELETE, TRACE, CONNECT 方法

#雖然HTTP/1.1 已經優化了很多點,作為一個目前使用最廣泛的協定版本,已經能夠滿足很多網絡需求,但隨著網頁變得越來越複雜,甚至演變成為獨立的應用,HTTP/1.1 逐漸暴露出了一些問題:

在傳輸資料時,每次都要重新建立連接,對行動端特別不友善

傳輸內容是明文,不夠安全

header 內容過大,每次請求header 變化不大,造成浪費

keep-alive 給服務端帶來效能壓力

為了解決這些問題,HTTPS 和SPDY 應運而生。

SPDY

其實 SPDY 並不是新的一種協議,而是在 HTTP 之前做了一層會話層。

在 2010 年到 2015 年,Google透過實踐一個實驗性的 SPDY 協議,證明了一個在客戶端和伺服器端交換資料的另類方式。其收集了瀏覽器和伺服器端的開發者的焦點問題,明確了回應數量的增加和解決複雜的資料傳輸。在啟動 SPDY 這個專案時預設的目標是:

頁面載入時間 (PLT) 減少 50%。

無須網站作者修改任何內容。

將部署複雜度降至最低,無需變更網路基礎架構。

與開源社群合作開發這個新協定。

收集真實效能數據,驗證這個實驗性協定是否有效。

為了達到降低目標,減少頁面載入時間的目標,SPDY 引入了一個新的二進位分幀資料層,以實現多向請求和回應、優先順序、最小化及消除不必要的網路延遲,目的是更有效地利用底層TCP 連接。

HTTP/2.0

時間來到 2015 年,HTTP/2.0 問世。先來介紹一下HTTP/2.0 的特點:

使用二進位分幀層:在應用層與傳輸層之間增加一個二進位分幀層,以此達到在不改動HTTP 的語義,HTTP 方法、狀態碼、URI 及首部欄位的情況下,突破HTTP1.1 的效能限制,改善傳輸效能,實現低延遲及高吞吐量。在二進位分幀層上,HTTP2.0 會將所有傳輸的資訊分割為更小的訊息和幀,並對它們採用二進位格式的編碼,其中HTTP1.x 的首部資訊會被封裝到Headers 幀,而我們的request body 則封裝到Data 訊框裡面。

二進位分幀

多路復用:對於HTTP/1.x,即使開啟了長連接,請求的發送也是串行發送的,在頻寬足夠的情況下,對頻寬的利用率不夠,HTTP/2.0 採用了多工的方式,可以並行發送多個請求,提高對頻寬的利用率。

多路復用

資料流優先權:由於請求可以並發發送了,那麼如果出現了瀏覽器在等待關鍵的CSS 或者JS 檔案完成對頁面的渲染時,伺服器卻在專注的發送圖片資源的情況怎麼辦呢? HTTP/2.0 對資料流可以設定優先值,這個優先值決定了客戶端和服務端處理不同的流採用不同的優先權策略。

服務端推送:在HTTP/2.0 中,伺服器可以向客戶發送請求以外的內容,例如正在請求一個頁面時,伺服器會把頁面相關的logo,CSS 等檔案直接推送到客戶端,而不會等到請求來的時候再發送,因為伺服器認為客戶端會用到這些東西。這相當於在一個 HTML 文件內集合了所有的資源。

頭部壓縮:使用首部表來追蹤和儲存先前發送的鍵值對,對於相同的內容,不會再每次請求和回應時發送。

以上就是對一次性搞懂 HTTP、HTTPS、SPDY、HTTP2的全部介紹,如果您想了解更多有關Html5教程,請關注PHP中文網。



以上是一次性搞懂 HTTP、HTTPS、SPDY、HTTP2的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
如何在 Bootstrap 4 中實現多項目輪播?如何在 Bootstrap 4 中實現多項目輪播?Apr 30, 2025 pm 03:24 PM

在Bootstrap4中實現多項目輪播的解決方案在Bootstrap4中實現多項目輪播並不是一件簡單的事情。雖然Bootstrap...

deepseek官網是如何實現鼠標滾動事件穿透效果的?deepseek官網是如何實現鼠標滾動事件穿透效果的?Apr 30, 2025 pm 03:21 PM

如何實現鼠標滾動事件穿透效果?在我們瀏覽網頁時,經常會遇到一些特別的交互設計。比如在deepseek官網上,�...

HTML 視頻的播放控件樣式怎麼修改HTML 視頻的播放控件樣式怎麼修改Apr 30, 2025 pm 03:18 PM

無法直接通過CSS修改HTML視頻的默認播放控件樣式。 1.使用JavaScript創建自定義控件。 2.通過CSS美化這些控件。 3.考慮兼容性、用戶體驗和性能,使用庫如Video.js或Plyr可簡化過程。

在手機上使用原生select會帶來哪些問題?在手機上使用原生select會帶來哪些問題?Apr 30, 2025 pm 03:15 PM

在手機上使用原生select的潛在問題在開發移動端應用時,我們常常會遇到選擇框的需求。通常情況下,開發者傾...

在手機上使用原生select的弊端是什麼?在手機上使用原生select的弊端是什麼?Apr 30, 2025 pm 03:12 PM

在手機上使用原生select的弊端是什麼?在移動設備上開發應用時,選擇合適的UI組件是非常重要的。許多開發者�...

如何使用Three.js和Octree優化房間內第三人稱漫遊的碰撞處理?如何使用Three.js和Octree優化房間內第三人稱漫遊的碰撞處理?Apr 30, 2025 pm 03:09 PM

使用Three.js和Octree優化房間內第三人稱漫遊的碰撞處理在Three.js中使用Octree實現房間內的第三人稱漫遊並添加碰�...

在手機上使用原生select會遇到哪些問題?在手機上使用原生select會遇到哪些問題?Apr 30, 2025 pm 03:06 PM

使用原生select在手機上的問題在移動設備上開發應用時,我們經常會遇到需要用戶進行選擇的場景。雖然原生sel...

為什麼有的網站能實現鼠標滾動穿透效果,而有的不行?為什麼有的網站能實現鼠標滾動穿透效果,而有的不行?Apr 30, 2025 pm 03:03 PM

探究鼠標滾動事件的實現原理在瀏覽一些網站時,你可能注意到某些頁面元素在鼠標懸停時仍然允許滾動整個頁...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。