看完這篇HTTP,跟面試官扯皮就沒問題了

2020年春節過後第一更,來的有點晚,希望大家能看到最後。

最初在有網路之前,我們的電腦都是單機的,單機系統是孤立的,我還記得 05 年前那會兒家裡有個電腦,想打電腦遊戲還得兩個人在一個電腦上玩兒,及其不方便。我就想為什麼家裡人不讓上網,我的同學家裡有網。

網際網路已經在高速發展了,HTTP 就是高速發展的一個產物。

認識 HTTP

首先你聽的最多的應該就是 HTTP 是一種 超文字傳輸協議(Hypertext Transfer Protocol),這你一定能說出來,但是這樣還不夠,假如你是大廠面試官,這不可能是他想要的最終結果,我們在面試的時候往往把自己知道的儘可能多的說出來,才有和麵試官談價錢的資本。那麼什麼是超文字傳輸協議?

超文字傳輸協議可以進行文字分割:

超文字(Hypertext)、傳輸(Transfer)、協議(Protocol)

,它們之間的關係如下

看完這篇HTTP,跟面試官扯皮就沒問題了

按照範圍的大小 協議 > 傳輸 > 超文字。下面就分別對這三個名次做一個解釋。

什麼是超文字

在網際網路早期的時候,我們輸入的資訊只能儲存在本地,無法和其他電腦進行互動。我們儲存的資訊通常都以文字即簡單字元的形式存在,文字是一種能夠被計算機解析的有意義的二進位制資料包。而隨著網際網路的高速發展,兩臺電腦之間能夠進行資料的傳輸後,人們不滿足只能在兩臺電腦之間傳輸文字,還想要傳輸圖片、音訊、影片,甚至點選文字或圖片能夠進行超連結的跳轉,那麼文字的語義就被擴大了,這種語義擴大後的文字就被稱為超文字(Hypertext)。

什麼是傳輸

那麼我們上面說到,兩臺計算機之間會形成互聯關係進行通訊,我們儲存的超文字會被解析成為二進位制資料包,由傳輸載體(例如同軸電纜,電話線,光纜)負責把二進位制資料包由計算機終端傳輸到另一個終端的過程(對終端的詳細解釋可以參考 你說你懂網際網路,那這些你知道麼?這篇文章)稱為傳輸(transfer)。

通常我們把傳輸資料包的一方稱為請求方,把接到二進位制資料包的一方稱為應答方。請求方和應答方可以進行互換,請求方也可以作為應答方接受資料,應答方也可以作為請求方請求資料,它們之間的關係如下

看完這篇HTTP,跟面試官扯皮就沒問題了

如圖所示,A 和 B 是兩個不同的端系統,它們之間可以作為資訊交換的載體存在,剛開始的時候是 A 作為請求方請求與 B 交換資訊,B 作為響應的一方提供資訊;隨著時間的推移,B 也可以作為請求方請求 A 交換資訊,那麼 A 也可以作為響應方響應 B 請求的資訊。

什麼是協議

協議這個名詞不僅侷限於網際網路範疇,也體現在日常生活中,比如情侶雙方約定好在哪個地點吃飯,這個約定也是一種協議,比如你應聘成功了,企業會和你簽訂勞動合同,這種雙方的僱傭關係也是一種 協議。注意自己一個人對自己的約定不能成為協議,協議的前提條件必須是多人約定。

那麼網路協議是什麼呢?

網路協議就是網路中(包括網際網路)傳遞、管理資訊的一些規範。如同人與人之間相互交流是需要遵循一定的規矩一樣,計算機之間的相互通訊需要共同遵守一定的規則,這些規則就稱為網路協議。

沒有網路協議的網際網路是混亂的,就和人類社會一樣,人不能想怎麼樣就怎麼樣,你的行為約束是受到法律的約束的;那麼網際網路中的端系統也不能自己想發什麼發什麼,也是需要受到通訊協議約束的。

那麼我們就可以總結一下,什麼是 HTTP?可以用下面這個經典的總結回答一下:

HTTP 是一個在計算機世界裡專門在兩點之間傳輸文字、圖片、音訊、影片等超文字資料的約定和規範

與 HTTP 有關的元件

隨著網路世界演進,HTTP 協議已經幾乎成為不可替代的一種協議,在瞭解了 HTTP 的基本組成後,下面再來帶你進一步認識一下 HTTP 協議。

網路模型

網路是一個複雜的系統,不僅包括大量的應用程式、端系統、通訊鏈路、分組交換機等,還有各種各樣的協議組成,那麼現在我們就來聊一下網路中的協議層次。

為了給網路協議的設計提供一個結構,網路設計者以分層(layer)的方式組織協議,每個協議屬於層次模型之一。每一層都是向它的上一層提供服務(service),即所謂的服務模型(service model)。每個分層中所有的協議稱為 協議棧(protocol stack)。因特網的協議棧由五個部分組成:物理層、鏈路層、網路層、運輸層和應用層。我們採用自上而下的方法研究其原理,也就是應用層 -> 物理層的方式。

應用層

應用層是網路應用程式和網路協議存放的分層,因特網的應用層包括許多協議,例如我們學 web 離不開的 HTTP,電子郵件傳送協議 SMTP、端系統檔案上傳協議 FTP、還有為我們進行域名解析的 DNS 協議。應用層協議分佈在多個端系統上,一個端系統應用程式與另外一個端系統應用程式交換資訊分組,我們把位於應用層的資訊分組稱為 報文(message)。

運輸層

因特網的運輸層在應用程式斷點之間傳送應用程式報文,在這一層主要有兩種傳輸協議 TCP和 UDP,利用這兩者中的任何一個都能夠傳輸報文,不過這兩種協議有巨大的不同。

TCP 向它的應用程式提供了面向連線的服務,它能夠控制並確認報文是否到達,並提供了擁塞機制來控制網路傳輸,因此當網路擁塞時,會抑制其傳輸速率。

UDP 協議向它的應用程式提供了無連線服務。它不具備可靠性的特徵,沒有流量控制,也沒有擁塞控制。我們把運輸層的分組稱為 報文段(segment)

網路層

因特網的網路層負責將稱為 資料報(datagram) 的網路分層從一臺主機移動到另一臺主機。網路層一個非常重要的協議是 IP 協議,所有具有網路層的因特網元件都必須執行 IP 協議,IP 協議是一種網際協議,除了 IP 協議外,網路層還包括一些其他網際協議和路由選擇協議,一般把網路層就稱為 IP 層,由此可知 IP 協議的重要性。

鏈路層

現在我們有應用程式通訊的協議,有了給應用程式提供運輸的協議,還有了用於約定傳送位置的 IP 協議,那麼如何才能真正的傳送資料呢?為了將分組從一個節點(主機或路由器)運輸到另一個節點,網路層必須依靠鏈路層提供服務。鏈路層的例子包括乙太網、WiFi 和電纜接入的 DOCSIS 協議,因為資料從源目的地傳送通常需要經過幾條鏈路,一個數據包可能被沿途不同的鏈路層協議處理,我們把鏈路層的分組稱為 幀(frame)

物理層

雖然鏈路層的作用是將幀從一個端系統運輸到另一個端系統,而物理層的作用是將幀中的一個個 位元 從一個節點運輸到另一個節點,物理層的協議仍然使用鏈路層協議,這些協議與實際的物理傳輸介質有關,例如,乙太網有很多物理層協議:關於雙絞銅線、關於同軸電纜、關於光纖等等。

五層網路協議的示意圖如下

看完這篇HTTP,跟面試官扯皮就沒問題了

OSI 模型

我們上面討論的計算網路協議模型不是唯一的 協議棧,ISO(國際標準化組織)提出來計算機網路應該按照7層來組織,那麼7層網路協議棧與5層的區別在哪裡?

看完這篇HTTP,跟面試官扯皮就沒問題了

從圖中可以一眼看出,OSI 要比上面的網路模型多了 表示層 和 會話層,其他層基本一致。表示層主要包括資料壓縮和資料加密以及資料描述,資料描述使得應用程式不必擔心計算機內部儲存格式的問題,而會話層提供了資料交換的定界和同步功能,包括建立檢查點和恢復方案。

瀏覽器

就如同各大郵箱使用電子郵件傳送協議 SMTP 一樣,瀏覽器是使用 HTTP 協議的主要載體,說到瀏覽器,你能想起來幾種?是的,隨著網景大戰結束後,瀏覽器迅速發展,至今已經出現過的瀏覽器主要有

看完這篇HTTP,跟面試官扯皮就沒問題了

瀏覽器正式的名字叫做 Web Broser,顧名思義,就是檢索、檢視網際網路上網頁資源的應用程式,名字裡的 Web,實際上指的就是 World Wide Web,也就是全球資訊網。

我們在位址列輸入URL(即網址),瀏覽器會向DNS(域名伺服器,後面會說)提供網址,由它來完成 URL 到 IP 地址的對映。然後將請求你的請求提交給具體的伺服器,在由伺服器返回我們要的結果(以HTML編碼格式返回給瀏覽器),瀏覽器執行HTML編碼,將結果顯示在瀏覽器的正文。這就是一個瀏覽器發起請求和接受響應的過程。

Web 伺服器

Web 伺服器的正式名稱叫做 Web Server,Web 伺服器一般指的是網站伺服器,上面說到瀏覽器是 HTTP 請求的發起方,那麼 Web 伺服器就是 HTTP 請求的應答方,Web 伺服器可以向瀏覽器等 Web 客戶端提供文件,也可以放置網站檔案,讓全世界瀏覽;可以放置資料檔案,讓全世界下載。目前最主流的三個Web伺服器是Apache、 Nginx 、IIS。

CDN

CDN的全稱是Content Delivery Network,即內容分發網路,它應用了 HTTP 協議裡的快取和代理技術,代替源站響應客戶端的請求。CDN 是構建在現有網路基礎之上的網路,它依靠部署在各地的邊緣伺服器,透過中心平臺的負載均衡、內容分發、排程等功能模組,使使用者就近獲取所需內容,降低網路擁塞,提高使用者訪問響應速度和命中率。CDN的關鍵技術主要有內容儲存和分發技術。

打比方說你要去亞馬遜上買書,之前你只能透過購物網站購買後從美國發貨過海關等重重關卡送到你的家裡,現在在中國建立一個亞馬遜分基地,你就不用透過美國進行郵寄,從中國就能把書儘快給你送到。

WAF

WAF 是一種 Web 應用程式防護系統(Web Application Firewall,簡稱 WAF),它是一種透過執行一系列針對HTTP / HTTPS的安全策略來專門為Web應用提供保護的一款產品,它是應用層面的防火牆,專門檢測 HTTP 流量,是防護 Web 應用的安全技術。

WAF 通常位於 Web 伺服器之前,可以阻止如 SQL 注入、跨站指令碼等攻擊,目前應用較多的一個開源專案是 ModSecurity,它能夠完全整合進 Apache 或 Nginx。

WebService

WebService 是一種 Web 應用程式,

WebService是一種跨程式語言和跨作業系統平臺的遠端呼叫技術

Web Service 是一種由 W3C 定義的應用服務開發規範,使用 client-server 主從架構,通常使用 WSDL 定義服務介面,使用 HTTP 協議傳輸 XML 或 SOAP 訊息,它是

一個基於 Web(HTTP)的服務架構技術

,既可以執行在內網,也可以在適當保護後執行在外網。

HTML

HTML 稱為超文字標記語言,是一種標識性的語言。它包括一系列標籤.透過這些標籤可以將網路上的文件格式統一,使分散的 Internet 資源連線為一個邏輯整體。HTML 文字是由 HTML 命令組成的描述性文字,HTML 命令可以說明文字,圖形、動畫、聲音、表格、連結等。

Web 頁面構成

Web 頁面(Web page)也叫做文件,是由一個個物件組成的。一個物件(Objecy) 只是一個檔案,比如一個 HTML 檔案、一個 JPEG 圖形、一個 Java 小程式或一個影片片段,它們在網路中可以透過 URL 地址定址。多數的 Web 頁面含有一個 HTML 基本檔案 以及幾個引用物件。

舉個例子,如果一個 Web 頁面包含 HTML 檔案和5個 JPEG 圖形,那麼這個 Web 頁面就有6個物件:一個 HTML 檔案和5個 JPEG 圖形。HTML 基本檔案透過 URL 地址引用頁面中的其他物件。

與 HTTP 有關的協議

在網際網路中,任何協議都不會單獨的完成資訊交換,HTTP 也一樣。雖然 HTTP 屬於應用層的協議,但是它仍然需要其他層次協議的配合完成資訊的交換,那麼在完成一次 HTTP 請求和響應的過程中,需要哪些協議的配合呢?一起來看一下

TCP/IP

TCP/IP 協議你一定聽過,TCP/IP 我們一般稱之為協議簇,什麼意思呢?就是 TCP/IP 協議簇中不僅僅只有 TCP 協議和 IP 協議,它是一系列網路通訊協議的統稱。而其中最核心的兩個協議就是 TCP / IP 協議,其他的還有 UDP、ICMP、ARP 等等,共同構成了一個複雜但有層次的協議棧。

TCP 協議的全稱是 Transmission Control Protocol 的縮寫,意思是傳輸控制協議,HTTP 使用 TCP 作為通訊協議,這是因為 TCP 是一種可靠的協議,而可靠能保證資料不丟失。

IP 協議的全稱是 Internet Protocol 的縮寫,它主要解決的是通訊雙方定址的問題。IP 協議使用 IP 地址 來標識網際網路上的每一臺計算機,可以把 IP 地址想象成為你手機的電話號碼,你要與他人通話必須先要知道他人的手機號碼,計算機網路中資訊交換必須先要知道對方的 IP 地址。(關於 TCP 和 IP 更多的討論我們會在後面詳解)

DNS

你有沒有想過為什麼你可以透過鍵入 www。google。com 就能夠獲取你想要的網站?我們上面說到,計算機網路中的每個端系統都有一個 IP 地址存在,而把 IP 地址轉換為便於人類記憶的協議就是 DNS 協議。

DNS 的全稱是域名系統(Domain Name System,縮寫:DNS),它作為將域名和 IP 地址相互對映的一個分散式資料庫,能夠使人更方便地訪問網際網路。

URI / URL

我們上面提到,你可以透過輸入 www。google。com 地址來訪問谷歌的官網,那麼這個地址有什麼規定嗎?我怎麼輸都可以?AAA。BBB。CCC 是不是也行?當然不是的,你輸入的地址格式必須要滿足 URI 的規範。

URI的全稱是(Uniform Resource Identifier),中文名稱是統一資源識別符號,使用它就能夠唯一地標記網際網路上資源。

URL的全稱是(Uniform Resource Locator),中文名稱是統一資源定位符,也就是我們俗稱的網址,它實際上是 URI 的一個子集。

URI 不僅包括 URL,還包括 URN(統一資源名稱),它們之間的關係如下

看完這篇HTTP,跟面試官扯皮就沒問題了

HTTPS

HTTP 一般是明文傳輸,很容易被攻擊者竊取重要資訊,鑑於此,HTTPS 應運而生。HTTPS 的全稱為 (Hyper Text Transfer Protocol over SecureSocket Layer),全稱有點長,HTTPS 和 HTTP 有很大的不同在於 HTTPS 是以安全為目標的 HTTP 通道,在 HTTP 的基礎上透過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS 在 HTTP 的基礎上增加了 SSL 層,也就是說

HTTPS = HTTP + SSL

。(這塊我們後面也會詳談 HTTPS)

HTTP 請求響應過程

你是不是很好奇,當你在瀏覽器中輸入網址後,到底發生了什麼事情?你想要的內容是如何展現出來的?讓我們透過一個例子來探討一下,我們假設訪問的 URL 地址為 http://www。someSchool。edu/someDepartment/home。index,當我們輸入網址並點選回車時,瀏覽器內部會進行如下操作

DNS伺服器會首先進行域名的對映,找到訪問www。someSchool。edu所在的地址,然後HTTP 客戶端程序在 80 埠發起一個到伺服器 www。someSchool。edu 的 TCP 連線(80 埠是 HTTP 的預設埠)。在客戶和伺服器程序中都會有一個套接字與其相連。

HTTP 客戶端透過它的套接字向伺服器傳送一個 HTTP 請求報文。該報文中包含了路徑 someDepartment/home。index 的資源,我們後面會詳細討論 HTTP 請求報文。

HTTP 伺服器透過它的套接字接受該報文,進行請求的解析工作,並從其儲存器(RAM 或磁碟)中檢索出物件 www。someSchool。edu/someDepartment/home。index,然後把檢索出來的物件進行封裝,封裝到 HTTP 響應報文中,並透過套接字向客戶進行傳送。

HTTP 伺服器隨即通知 TCP 斷開 TCP 連線,實際上是需要等到客戶接受完響應報文後才會斷開 TCP 連線。

HTTP 客戶端接受完響應報文後,TCP 連線會關閉。HTTP 客戶端從響應中提取出報文中是一個 HTML 響應檔案,並檢查該 HTML 檔案,然後迴圈檢查報文中其他內部物件。

檢查完成後,HTTP 客戶端會把對應的資源透過顯示器呈現給使用者。

至此,鍵入網址再按下回車的全過程就結束了。上述過程描述的是一種簡單的請求-響應全過程,真實的請求-響應情況可能要比上面描述的過程複雜很多。

如果喜歡這篇文章,歡迎關注我,並轉發~

TAG: http協議WebIPTCP