什麼是HTTP

什麼是HTTP

什麼是 HTTP ?你肯定立馬跳出:「HTTP 是超文本傳輸協議,就是 HyperText Transfer Protocol」。

這樣回答還是過於簡單,那到底什麼是 「超文本」,什麼是 「協議」? HTTP 下面還有哪些協議? HTTP 有什麼缺點以及優點?

超文本傳輸協議 ,我們拆成三個部分,超文本、傳輸、協議

我們還要知道 HTTP 不是互聯網,也不是程式語言,是一種協議。HTTP 通常跑在 TCP/IP 協議棧之上,依靠 IP 協議實現定址和路由、TCP 協議實現可靠數據傳輸、DNS 協議實現域名查找、SSL/TLS 協議實現安全通訊。此外,還有一些協議依賴於 HTTP,例如 WebSocket、HTTPDNS 等。這些協議相互交織,構成了一個協議網,而 HTTP 則處於中心地位。

協議

HTTP 是一個協議,不是開發語言,不是一個服務,也不是一種網路。只是一種協議、一種約定。那什麼是協議呢?

現實生活中也隨處可見。比如畢業時簽 」三方協議「,入職工作 」合約協議「,還有 我們平時使用的軟體 」軟體協議「。

其實一就是一種規範約定,約定雙方需要遵守的東西,只有在這個規定下雙方才能正確的執行對應動作和享有對應的權益。

如果只有你一個人,那你自然可以想幹什麼就幹什麼,想怎麼玩就怎麼玩,不會幹涉其他人,其他人也不會幹涉你,也就不需要所謂的「協議」。但是,一旦有了兩個以上的參與者出現,為了保證最基本的順暢交流,協議就自然而然地出現了。

協議意味著有多個參與者為了達成某個共同的目的而站在了一起,除了要無疑義地溝通交流之外,還必須明確地規定各方的「責、權、利」,約定該做什麼不該做什麼,先做什麼後做什麼,做錯了怎麼辦,有沒有補救措施等等。就像 JVM 虛擬機載入 class ,只有符合協議規定的東西 JVM 才能正確解析和載入。

劃重點了老鐵們:HTTP 是一個用在電腦世界裡的協議。它使用電腦能夠理解的語言確立了一種電腦之間交流通訊的規範,以及相關的各種控制和錯誤處理方式。

傳輸

HTTP 是一個「傳輸協議」,所謂的「傳輸」(Transfer)其實很好理解,就是把一堆東西從 A 點搬到 B 點,或者從 B 點搬到 A 點,即「A<===>B」。

HTTP 協議是一個「雙向協議」。

也就是說,有兩個最基本的參與者 A 和 B,從 A 開始到 B 結束,數據在 A 和 B 之間雙向而不是單向流動。通常我們把先發起傳輸動作的 A 叫做請求方,把後接到傳輸的 B 叫做應答方或者響應方

雙方約定使用 HTTP 協議來通訊,瀏覽器把一些數據發送給伺服器,伺服器再把數據返回給瀏覽器。

數據雖然是在 A 和 B 之間傳輸,但並沒有限制只有 A 和 B 這兩個角色,允許中間有「中轉」或者「接力」。

這樣,傳輸方式就從「A<===>B」,變成了「A<=>X<=>Y<=>Z<=>B」,A 到 B 的傳輸過程中可以存在任意多個「中間人」,而這些中間人也都遵從 HTTP 協議,只要不打擾基本的數據傳輸,就可以添加任意的額外功能,例如安全認證、數據壓縮、編碼轉換等等,優化整個傳輸過程。

所以 HTTP 是一個在電腦世界裡專門用來在兩點之間傳輸數據的約定和規範。

超文本

所謂 「文本」(Text),就表示 HTTP 傳輸的不是 TCP/UDP 這些底層協議里被切分的雜亂無章的二進位包(datagram),而是完整的、有意義的數據,可以被瀏覽器、伺服器這樣的上層應用程式處理。

在互聯網早期,「文本」 的確知識簡單的文字,但是現在包含著 圖片、影片、音頻、壓縮包。

從面含義理解:超文本,就是超越了普通文本,也就是 圖片、影片、音頻、壓縮包等混合體,最關鍵的是含有「超鏈接」,能夠從一個「超文本」跳躍到另一個「超文本」,形成複雜的非線性、網狀的結構關係。

我們最熟悉的就應該是 HTML 了,它本身只是純文字文件,但內部用很多標籤定義了對圖片、音頻、影片等的鏈接,再經過瀏覽器的解釋,呈現在我們面前的就是一個含有多種視聽資訊的頁面。

OK,經過了對 HTTP 里這三個名詞的詳細解釋,下次當你再面對面試官時,就可以給出比「超文本傳輸協議」這七個字更準確更有技術含量的答案:「HTTP 是一個在電腦世界裡專門在兩點之間傳輸文字、圖片、音頻、影片等超文本數據的約定和規範」。

如下圖所示,HTTP 涉及的知識點。左邊的部分是與 HTTP 有關係的各種協議,比較偏向於理論;而右邊的部分是與 HTTP 有關係的各種應用技術,偏向於實際應用。

HTTP

MageByte

Tags: