HTTP是什么?HTTP又不是什么?


楔子

HTTP 我們都知道它是超文本傳輸協議,也就是 Hyper Text Transfer Protocol 這幾個單詞的首字母,但面試官肯定不會只問你 HTTP 是什么,他肯定會再追問你一些其它問題:

  • 你是怎么理解 HTTP 字面上的 "超文本" 和 "傳輸協議" 的?
  • 能否談一下你對 HTTP 的認識?越多越好
  • HTTP 有什么特點?有什么優點和缺點?
  • HTTP 下層都有哪些協議?是如何工作的?
  • ......

要解決上面的那些問題,我們首先需要明白 HTTP 是什么?

HTTP 是什么?

先看一下 HTTP 的名字:"超文本傳輸協議",它可以拆成三個部分,分別是:超文本、傳輸、協議。我們從后往前來逐個解析,理解了這三個詞,我們也就明白了什么是 HTTP。

首先,HTTP 是一個協議,那么協議又是什么呢?簡單來講,協議就是參與者都必須遵守的一組約定,其實協議並不僅限於計算機世界,現實生活中也隨處可見。

例如,你在剛畢業時可能會簽一個三方協議,找房子時會簽一個租房協議,公司入職時還可能會簽一個保密協議,工作中使用的各種軟件也都帶着各自的許可協議。它們和 HTTP 本質上是相同的。

然后是第二部分,傳輸。計算機和網絡世界里有數不清的各種角色:CPU、內存、總線、磁盤、操作系統、瀏覽器、網關、服務器……。這些角色之間相互通信也必然會有各式各樣、五花八門的協議,用處也各不相同,例如廣播協議、尋址協議、路由協議、隧道協議、選舉協議等等。

而 HTTP 是一個傳輸協議,所謂的傳輸(Transfer)很好理解,說白了就是將東西從一點搬到另一點。但是注意,這其中隱含了兩個重要信息。

第一點,HTTP 傳輸是雙向的,也就是說有兩個最基本的參與者 A 和 B,A 可以發送數據給 B,B 也可以返回數據給 A。通常我們把先發起傳輸動作的 A 叫做請求方,接收到請求然后進行響應的 B 叫做響應方。比如我們登陸 bilibili 觀看動漫,瀏覽器就是請求方,bilibili 網站就是響應方。雙方約定使用 HTTP 協議來通信,於是瀏覽器把數據發送給網站,網站再把數據返回給瀏覽器、然后瀏覽器將其展示在屏幕上,這樣我們就能看到有趣的番劇了。

第二點,數據雖然是在 A 和 B 之間傳輸,但並沒有限制只有 A 和 B 這兩個角色,中間允許有中轉或者接力。也就是說 A 到 B 的傳輸過程中可以存在任意多個中間人,這些中間人也遵循 HTTP 協議,只要不打擾到基本的數據傳輸,就可以添加任意的額外功能,例如:安全認證、數據壓縮、編碼轉換等等,從而優化整個傳輸過程。像我們平時掛的 威批恩 就可以理解為中間人。

最后是第三部分,也就是我們的超文本,不用想也知道它啃腚是客戶端和服務端之間傳輸的數據,但是這個超文本具體代表的含義是什么呢?

所謂文本,就表示 HTTP 傳輸的不是 TCP/UDP 這些底層協議里被切分的雜亂無章的二進制包(datagram),而是完整的、有意義的數據,可以被瀏覽器、服務器這樣的上層應用程序處理。在互聯網早期,文本只是簡單的字符文字,但發展到現在,文本的涵義已經被大大地擴展了,圖片、音頻、視頻、甚至是壓縮包,在 HTTP 眼里都可以算做是文本。

所謂超文本,就是 "超越了普通文本的文本",它是文字、圖片、音頻和視頻等的混合體,最關鍵的是含有超鏈接,能夠從一個超文本跳躍到另一個超文本,形成復雜的非線性、網狀的結構關系。

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

總結:HTTP 指的是超文本傳輸協議,它代表了客戶端和服務端之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規范,以及相關的各種控制和錯誤處理方式。

不要認為超文本只能傳輸文本,它也可以傳輸音頻、圖片等數據。

HTTP 不是什么?

現在我們知道了 HTTP 是什么?那么再來看看 HTTP 不是什么,也就是說 HTTP 不能干什么。

因為 HTTP 是一個協議,是一種計算機通信的規范,所以它不存在單獨的實體。它不是瀏覽器、手機 APP 那樣的應用程序,也不是 Windows、Linux 那樣的操作系統,更不是 Apache、Nginx、Tomcat 那樣的 web 服務器。但 HTTP 又與應用程序、操作系統、Web 服務器密切相關,在它們之間的通信過程中存在,而且是一種動態的存在,是發生在網絡連接、傳輸超文本數據時的一個動態過程。

HTTP 不是互聯網

互聯網(Internet)是遍布於全球的許多網絡互相連接而形成的一個巨大的國際網絡,在它上面存放着各式各樣的資源,也對應着各式各樣的協議,例如超文本資源使用 HTTP,普通文件使用 FTP,電子郵件使用 SMTP 和 POP3 等。

但毫無疑問,HTTP 是構建互聯網的一塊重要拼圖,而且是占比最大的那一塊。

HTTP 不是編程語言

編程語言是人與計算機溝通交流所使用的語言,而 HTTP 是計算機與計算機溝通交流的語言,我們無法使用 HTTP 來編程,但可以反過來,用編程語言去實現 HTTP,告訴計算機如何用 HTTP 來與外界通信。

很多流行的編程語言都支持編寫 HTTP 相關的服務或應用,例如使用 Python 編寫 Web 服務,使用 JavaScript 在前端實現動態頁面更新。

HTTP 不是 HTML

這個可能要特別強調一下,千萬不要把 HTTP 與 HTML 混為一談,雖然這兩者經常是同時出現。HTML 是超文本的載體,是一種標記語言,使用各種標簽描述文字、圖片、超鏈接等資源,並且可以嵌入 CSS、JavaScript 等技術實現復雜的動態效果。單論次數,在互聯網上 HTTP 傳輸最多的可能就是 HTML,但要是論數據量,HTML 可能要往后排了,圖片、音頻、視頻這些類型的資源顯然更大。

HTTP 不是一個孤立的協議

HTTP 不是一個能 "獨善其身" 的協議,它也是構建在某些協議之上的。在互聯網世界里,HTTP 通常跑在 TCP/IP 協議棧之上,依靠 IP 協議實現尋址和路由、TCP 協議實現可靠數據傳輸、DNS 協議實現域名查找、SSL/TLS 協議實現安全通信(HTTPS)。此外,還有一些協議依賴於 HTTP,例如 WebSocket、HTTPDNS 等。這些協議相互交織,構成了一個協議網,而 HTTP 則處於中心地位。

我們也可以把 HTTP 看成是 "與 HTTP 協議相關的所有應用層技術的總和。"

然后再來一張思維導圖,基本上涵蓋了與 HTTP 相關的的內容,后續慢慢介紹。

圖的左半部分是與 HTTP 相關的各種協議,右半部分是與 HTTP 相關的各種應用技術。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM