通訊網路/HTTP 協議
超文字傳輸協議 (HTTP) 是一種應用層協議,用於傳輸全球資訊網上的幾乎所有檔案和其他資料,無論是 HTML 檔案、影像檔案、查詢結果,還是其他任何內容。通常,HTTP 透過 TCP/IP 套接字進行。
瀏覽器是 HTTP 客戶端,因為它向 HTTP 伺服器(Web 伺服器)傳送請求,然後伺服器將響應傳送回客戶端。 HTTP 伺服器的標準(和預設)監聽埠是 80,但它們可以使用任何埠。
HTTP 基於 TCP/IP 協議,通常用於網際網路上從伺服器傳輸網頁到瀏覽器。
網路應用
客戶端-伺服器模式
客戶端和伺服器是端系統,也稱為主機。 客戶端發起與伺服器的聯絡以請求服務。 例如,對於 Web,客戶端在 Web 瀏覽器中實現,對於電子郵件,它是郵件閱讀器。 以類似的方式,伺服器透過提供所請求的網頁和郵件伺服器來提供請求的服務,向客戶端傳送電子郵件。
對等模式
在網路中,對等方可以隨時加入和離開網路。 因此,對等方可以是客戶端或伺服器。 因此,可擴充套件性是對等網路的優勢。 除了客戶端-伺服器模式和對等模式之外,它還支援混合對等和客戶端-伺服器模式,在現實世界中。
HTTP 協議還支援我們在日常生活中使用的另一種或多種應用程式協議。 對於電子郵件,我們使用 SMTP 協議,或者當我們在網路世界中透過電話與其他人交談(Voip)時。 所以這些應用程式是透過網路世界。 它們定義訊息的型別和使用的語法。 它還提供有關採取的行動或結果的資訊。
識別應用程式
當必須執行通訊過程時,有兩件事很重要: 1. IP 地址:這是執行該過程的主機的 IP 地址。 它是一個 32 位地址,是唯一的識別符號。 從這個 IP 地址,主機被識別並用於與網路世界通訊。 2. 埠號:IP 地址和埠號的組合稱為套接字。 因此,套接字 = (IP 地址,埠號)
因此,每當客戶端或 Web 使用者應用程式與 Web 伺服器通訊時,它都需要四個重要元件,也稱為 TCP 連線元組。 此元組包含:1. 客戶端 IP 地址 2. 客戶端埠號 3. 源 IP 地址 4. 源埠號
HTTP 協議使用 TCP 協議在客戶端(例如 Web 瀏覽器)和伺服器(例如 wikibooks.org)之間建立可靠的連線。 所有 HTTP 命令都以純文字形式,並且幾乎所有 HTTP 請求都使用 TCP 埠 80 傳送,當然可以使用任何埠。 HTTP 協議要求每個請求都以 IP 地址形式,而不是 DNS 格式。 所以如果我們想載入 www.wikibooks.org,我們需要先從 DNS 伺服器解析 wikibooks.org IP 地址,然後發出該請求。 假設(這不可能)wikibooks.org 的 IP 地址是 192.168.1.1。 然後,要載入此頁面,我們將建立一個包含以下文字的 TCP 資料包
GET 192.168.1.1/wiki/Communication_Systems/HTTP_Protocol HTTP/1.1
請求的第一部分,“GET”,是我們的 HTTP 命令。 請求的中間部分是我們想要載入的頁面的 URL(通用資源定位器),請求的最後部分(“HTTP/1.1”)告訴伺服器將使用哪個版本的 HTTP。
當伺服器收到請求時,它將使用 HTTP 標準中定義的狀態程式碼進行回覆。 例如
HTTP/1.1 200 OK
或臭名昭著的
HTTP/1.1 404 Not Found
回覆的第一部分是正在使用的 HTTP 版本,回覆的第二部分是錯誤程式碼號,回覆的最後部分是純文字形式的人類可讀訊息。
網路世界由許多網頁組成,這些網頁由 URL 定位的物件組成。 網頁主要由 HTML 頁面組成,以及一些引用的物件。 稱為統一資源定位器的 URL 由主機名和路徑名組成。
主機名是 www.sjsu.edu/student/tower.gif
Web 使用者透過代理(如 Internet Explorer 或 Firefox)向 Web 伺服器傳送請求。 此使用者代理處理所有對 Web 伺服器的 HTTP 請求。 同樣適用於 Web 伺服器,當它透過伺服器(如 Apache 伺服器或 MS Internet Information Server)向 Web 使用者傳送資訊時。
HTTP 是 Web 的應用程式層協議,它在客戶端-伺服器技術上執行。 客戶端向伺服器請求 HTML 頁面,伺服器以 HTML 頁面進行響應。 在這裡,客戶端透過其代理請求頁面和物件,伺服器透過顯示來響應它們。
這是如何工作的??
HTTP:TCP 傳輸服務使用套接字來傳輸資料。 客戶端透過在埠 80 上使用套接字到伺服器來發起 TCP 連線。 然後伺服器接受來自客戶端的連線。 客戶端請求 HTML 頁面和物件,這些頁面和物件隨後在客戶端瀏覽器和 Web 伺服器之間交換。 完成請求後,TCP 連線關閉。
由於 HTTP 是一種無狀態協議。 它不會保留有關先前客戶端請求的使用者的資訊。 所以,這個協議很簡單,但是如果你必須維護過去的客戶端記錄,那麼它就很複雜。 因為伺服器會維護所有客戶端請求,當伺服器崩潰時,很難獲取資訊並使系統非常複雜。
網頁由物件和 URL 組成。 由於可能存在一個或多個物件或 URL,因此 HTTP 連線的型別決定了請求物件的順序。
由於 HTTP 不斷發展以提高其效能,因此有兩種型別的連線:• 非永續性 (HTTP/1.0) • 永續性 (HTTP/1.1)
非持久連線和持久連線之間的主要區別在於傳輸物件所需的 TCP 連線數量。
非永續性 HTTP - 此連線要求每個物件透過單獨建立的 TCP 連線進行傳送。 通常,初始 TCP 連線有一個往返時間延遲。 假設使用者請求包含文字和 5 個影像的頁面。 TCP 連線數量如下
永續性 HTTP - 此連線也稱為 HTTP 保持活動或 HTTP 重用。 其理念是使用相同的 TCP 連線來發送和接收使用相同連線的多個 HTTP 請求/響應。 使用持久連線對於提高效能至關重要。
無管道永續性 HTTP - 在此連線中,每個客戶端必須等待先前請求的物件收到後才能發出新的請求。 因此,如果不計算初始 TCP 建立(一個 RTT 時間),每個物件至少需要一個 RTT 加上伺服器傳送物件的時間。
帶管道永續性 HTTP - 允許客戶端同時傳送所有(多個)請求,因此伺服器可以同時接收所有請求,然後按順序傳送響應(物件)。 HTTP/1.1 中的管道方法是預設方法。 管道中最短的時間是一個初始 RTT,請求和響應的 RTT 以及伺服器傳送所有物件的傳輸時間。
因此,我們可以說,在所有上述型別中,考慮到一些文字和三個物件,所需的 RTT 數量將是
- 非永續性 HTTP
- 永續性 HTTP
- 無管道
- 帶管道
往返時間 (RTT):將資料包傳送到遠端主機並接收響應所需的時間:用於衡量給定時間網路的延遲。
響應時間
響應時間表示啟動 TCP 連線以及接收下一個響應和請求以及檔案傳輸時間所需的時間。
以下示例表示響應時間 -
從上圖可以看出,響應時間為
2 RTT + 檔案傳輸時間。
HTTP 使用兩種型別的訊息:1. 請求訊息 2. 響應訊息
請求行包含三個部分,用空格分隔:方法名稱、請求資源的本地路徑和使用的 HTTP 版本。訊息格式為 ASCII,以便人類可以閱讀。
例如
GET /path/to/the/file.html HTTP/1.0
GET 方法是最常用的方法。它表示“給我這個資源”。URL 的一部分也稱為請求 URL。HTTP 必須為大寫字母,下一部分表示 HTTP 的版本。
HTTP 請求訊息:通用格式
HTTP 請求訊息格式如下所示
方法是用於請求 URL 的方法型別。例如 GET、POST 或 HEAD。URL 塊包含請求的 URL。版本表示 HTTP 版本。HTTP/1.0 或 HTTP/1.1。標題行包括瀏覽器型別、主機、物件數量和檔名以及請求頁面的語言型別。例如
實體主體由 POST 方法使用。當用戶在頁面上輸入資訊時,實體主體包含該資訊。
HTTP 1.0 包含 GET、POST 和 HEAD 方法。而 HTTP 1.1 除了 GET、POST 和 HEAD 之外,還包含 PUT 和 DELETE。
上傳網頁中的資訊
POST 方法
要求使用者輸入資訊的網頁使用 POST 方法。網頁使用者填寫的資訊將上傳到伺服器的實體主體中。
POST 方法中典型的表單提交。內容型別通常為 application/x-www-form-urlencoded,內容長度是 URL 編碼表單資料的長度。
URL 方法
URL 方法使用 GET 方法從使用者那裡獲取使用者輸入。它將要上傳到伺服器的使用者的資訊附加到 URL 欄位中。
HTTP 訊息響應行也包含三個部分,用空格分隔:HTTP 版本、表示請求結果的響應狀態程式碼以及狀態程式碼的英文短語。這第一行也稱為狀態行。
HTTP 響應訊息格式如下所示
例如
以下是部分 HTTP 響應狀態程式碼
200 OK 請求成功,生成的資源(例如檔案或指令碼輸出)將返回訊息正文中。
404 Not Found 請求的資源不存在。
301 Moved Permanently
302 Moved Temporarily
303 See Other(僅限 HTTP 1.1)
資源已移動到另一個 URL(由 Location:響應頭給出),應由客戶端自動檢索。這通常由 CGI 指令碼用來將瀏覽器重定向到現有檔案。
500 Server Error
意外的伺服器錯誤。最常見的原因是伺服器端指令碼語法錯誤、失敗或無法正常執行。
HTTP 協議是一種無狀態協議。因此,應該有一種機制來使用 Web 伺服器識別使用者。有各種技術被使用
1. 身份驗證 2. Cookie
1. 身份驗證
客戶端每次從 Web 伺服器請求網頁時,伺服器都會驗證使用者。因此,每次網頁使用者或客戶端請求任何物件時,它都必須提供使用者名稱和密碼,以便伺服器識別。身份驗證的需要是為了使伺服器能夠控制文件。由於 HTTP 協議是無狀態的,因此每次請求網頁時都必須提供資訊。授權在請求的標題行中進行。通常,快取用於儲存網頁使用者的使用者名稱和密碼。因此,每次都不必提供相同的資訊。
2. Cookie
Cookie 由 Web 伺服器用於識別 Web 使用者。它們是儲存在 Web 使用者磁碟上的少量資料。它在所有主要的網站上使用。因為它們在 Web 世界中具有相對重要的意義。如前所述,cookie 是少量資料,而不是程式碼。每次瀏覽器訪問伺服器站點時,這塊小資訊都會儲存到 Web 使用者的機器中。
那麼 Cookie 如何精確地發揮作用呢?
當 Web 使用者的瀏覽器從 Web 伺服器請求檔案時,它會將檔案與 Cookie 一起傳送。因此,下次 Web 瀏覽器從同一個伺服器請求檔案時,它會將之前的 Cookie 傳送到 Web 伺服器,以便伺服器識別該瀏覽器之前已請求過檔案。因此,Web 伺服器會協調您對其網站不同頁面的訪問。
一個典型的例子可能是您進行網上購物時,cookie 用於跟蹤您的購物車。
Cookie 的主要四個組成部分是
1. HTTP 響應訊息中的 Cookie 標題行。2. HTTP 請求訊息中的 Cookie 標題行。3. 儲存在使用者主機中並由使用者瀏覽器管理的 Cookie 檔案。4. 網站上的後端資料庫。因此,我們可以說 Cookie 用於保持 Web 瀏覽器的狀態。由於 HTTP 是無狀態的,因此伺服器應該有一些方法來記住客戶端請求的狀態。
Cookie 有兩種型別,一種是永續性的,另一種是非永續性的。永續性 Cookie 會保留在 Web 瀏覽器的機器記憶體中,直到它第一次建立時指定的時間為止。而非永續性 Cookie 是那些在 Web 使用者關閉瀏覽器後立即刪除的 Cookie。
Cookie 在當今的網際網路世界中帶來了許多有用的應用。藉助 Cookie,您可以擁有:• 使用者帳戶 • 網上購物 • Web 門戶 • 廣告
但是,使用這些 Cookie,您可以秘密地跟蹤 Web 使用者的習慣。因為每次 Web 瀏覽器向 Web 伺服器傳送請求時,它都會包含其 IP 地址、使用的瀏覽器型別和作業系統。因此,此資訊也會記錄到伺服器的檔案中。
廣告是 Cookie 中的主要問題。由於它被用來跟蹤個人的瀏覽和購買習慣,因此它不太令人滿意。由於伺服器的日誌檔案包含您所有的資訊,因此跟蹤您就變得容易。廣告公司擁有許多客戶,包括其他幾個廣告公司。因此,它與許多其他代理機構簽訂了合同。它們在其網站上放置一個影像檔案。一旦您點選它們,您點選的不是影像,而是到另一個廣告公司網站的連結。因此,當您請求該頁面時,它會向您傳送一個 Cookie。因此,您的 IP 地址被跟蹤。每次您請求其網站頁面時,它們都可以跟蹤您訪問其網站的次數、您訪問了哪些頁面以及訪問頻率。因此,他們會了解您的興趣。因此,這些重要資訊對於他們來說非常寶貴,他們可以跟蹤您的偏好,並根據您的推斷來定位您。
代理伺服器的主要目標是在不涉及原始 Web 伺服器的情況下滿足客戶端的請求。它是一臺充當客戶端 Web 瀏覽器和 Web 伺服器之間緩衝區的伺服器。它接收來自使用者的請求,如果包含請求的頁面,則對其進行響應。如果它沒有請求的頁面,那麼它會向原始 Web 伺服器請求並響應客戶端。它使用快取來儲存頁面。如果請求的網頁在快取中,它會快速滿足請求。
代理伺服器的工作原理
代理伺服器的兩個主要目的是
1. 提高效能 -
因為它會將結果儲存一段時間。如果再次請求相同的結果,並且它存在於代理伺服器的快取中,那麼可以在更短的時間內滿足請求。因此,它極大地提高了效能。主要的線上搜尋擁有大量的代理伺服器,以服務於大量 Web 使用者。
2. 過濾請求 -
代理伺服器也可以用來過濾請求。假設一家公司想要限制使用者訪問特定的一組網站,這可以透過代理伺服器來實現。
條件性 GET
條件 GET 與 GET 方法相同,區別在於包含 If-modified-since、If-unmodified-since、If-match、If-None-Match 或 If-Range 頭部欄位。條件 GET 方法請求可以在滿足特定條件的情況下完成。這種方法用於減少網路使用,以便在未修改的情況下利用快取實體來滿足請求,從而避免不必要的傳輸資料。
條件 GET 的工作原理
當客戶端向伺服器請求 html 頁面時,代理伺服器會在其快取中檢查請求的頁面。它會檢查頭部中的 last-modified 日期條目。
如果確定快取條目中的請求頁面已過期,代理伺服器會向主伺服器請求更新的頁面。然後,主伺服器會響應該請求,並將頁面的更新發送到代理伺服器;這些更新將被轉發到客戶端,並存儲在代理伺服器快取中。
HTTPS 是 HTTP 的安全版本。它表示應使用埠 443 而不是埠 80。它被廣泛使用,既在電子商務等安全關注領域,也在犯罪預防領域,試圖確保終端使用者實際上正在獲取他們正在尋找的網站。協議識別符號 HTTPS 指示使用者代理使用者正在尋找安全通道。
HTTPS 遵循一個步驟來在網路中建立安全連線。安全連線是自動完成的。步驟如下:
- 客戶端使用伺服器的數字證書驗證伺服器。
- 客戶端和伺服器協商它們將用於連線的密碼套件(一組安全協議)。
- 客戶端和伺服器生成用於加密和解密資料的會話金鑰。
- 客戶端和伺服器建立安全加密連線。
當客戶端或伺服器無法協商密碼套件時,HTTPS 會結束其會話。密碼套件可以基於以下任何一種:
- 基於摘要 -
- 訊息摘要 5 (MD5)
- 安全雜湊演算法 1 (SHA-1)
- 基於公鑰 -
- Rivest-Shamir-Adelman (RSA) 加密/解密。
- 數字簽名演算法 (DSA)
- Diffie-Hellman 金鑰交換/金鑰生成。
- X.509 數字證書。
本章包含 HTTP,以及網路世界是如何運作的。它詳細介紹了在 TCP 連線中用於傳輸網路世界中資料的各種方法。它包含有關請求和響應方法的詳細資訊。它還包含使用者身份驗證方法,例如身份驗證和 Cookie。對 Cookie 部分進行了詳細解釋。還介紹了 HTTP 中的各種連線,例如非持久連線和持久連線。我們還提到了代理伺服器及其工作原理。最後,介紹了 HTTP 的安全版本,即 HTTPS。










