詳解HTTP協議(一) 概念篇

2021-10-08 11:13:39 字數 2844 閱讀 3092

作為web程式設計師,http恐怕是與之關係最為緊密的應用層協議了。 http全稱hypertext transfer protocol(超文字傳輸協議 ),基於b/s架構,是web技術的核心。 b/s架構下,客戶端程式和伺服器程式執行在不同的端系統中,客戶端程式可以成功向伺服器程式請求到乙個web頁面,正是通過交換http報文的方式實現的,http協議定義了這些報文的結構和伺服器進行報文交換的方式。

當使用者請求乙個web頁面時,瀏覽器向伺服器發出乙個http請求報文,該報文中包含所要請求的物件。伺服器接收到請求並返回包含這些物件的http響應報文進行響應。

http使用tcp協議來實現可靠傳輸。瀏覽器首先發起乙個與伺服器的tcp連線,一旦連線建立,瀏覽器程序和伺服器程序就可以通過套接字介面訪問tcp連線。瀏覽器程序向它的套接字介面傳送http請求報文,該報文被tcp接管並負責可靠傳輸,伺服器程序從它的套接字介面接收http請求報文並向它的套接字傳送http響應報問,tcp再負責將生成的http響應報文傳送到瀏覽器程序的套接字介面,瀏覽器程序再從它的套接字介面中獲取這個http響應報文。一次可靠的http報文交換便完成了,需注意的是,在這次報文交換中,伺服器端是不會儲存關於客戶的任何資訊的,因此http協議是乙個無狀態協議(stateless protocol)

簡單說,非持續連線在向伺服器請求並成功獲取乙個物件時,會斷開 tcp 連線,當請求下乙個物件時,再重新建立 tcp 連線。而持續性連線則是向伺服器請求並成功獲取乙個物件後並不會斷開 tcp 連線,下次請求物件依然使用這個連線。http 在預設方式下使用持續連線,客戶端和伺服器端也可以配置成使用非持續連線。採用非持續連線的缺陷十分明顯,首先,每次建立連線都需要在客戶端和伺服器中分配 tcp 的緩衝區和保持 tcp 變數,這個 web 伺服器帶來了嚴重的負擔。其次,每乙個物件都要經受兩倍 rtt(round-trip time,往返時間) 的交付時延,即乙個 rtt 用於建立 tcp,另乙個 rtt 用於請求和接收乙個物件。但其實也不必過於悲觀,即便採用非持續性連線,請求乙個web 頁面時也並非完全序列的。大部分瀏覽器都會預設開啟 5~10 個並行的 tcp 連線,每條連線處理乙個請求響應事務。如果採用持續性連線,大部分請求都會在乙個 rtt 中完成,但也不應該一直保持著客戶端和伺服器之間的 tcp 連線,這樣會造成伺服器資源的浪費。一般來說,如果一條連線經過一定時間間隔仍未被使用,伺服器應該關閉該連線。

http 對報文格式有著嚴格的要求,即使是乙個空格、乙個換行符都不允許出錯。

http 請求報文

第一行為請求行,共有三個字段:方法字段、url 欄位和 http 版本字段。這裡方法欄位為 get,即本次請求方法為 get 方法。url 欄位為 /somedir/page.html,代表請求物件 page.html 在伺服器中的相對路徑。http 欄位為 http/1.1,代表使用的 http 協議版本為 1.1。

第二行為首部行,首部行的內容並非固定。這裡 host 字段指明了物件所在主機的網域名稱,由於請求報文發出時客戶端與伺服器已經建立了 tcp 連線,故該字段主要是給 web **高速緩衝用的。connection 字段用以告訴伺服器是否在本次物件請求完成後關閉 tcp 連線,即 http 的工作模式為持續連線還是非持續連線。user-agent 字段用以指明使用者**型別,這裡 mozilla/5.0 代表使用者為 firefox 瀏覽器,很多反爬蟲機制便是將 user-agent 作為判斷請求方是否是惡意爬蟲的證據之一。accept-language 代表使用者想得到該物件的語言版本,這裡的 fr 代表法語版本。伺服器可以根據該欄位返回不同的物件版本。

由於本次請求方法為 get,故沒有實體部分。

http 響應報文

http 響應報文也分為三個部分:狀態行、首部行和實體。下面 提供乙個典型的 http 響應報文:

第一行為狀態行,共有三個字段:協議版本、狀態碼和相應狀態資訊。這裡狀態行指示伺服器正在使用 http/1.1,並且一切正常。

第二行開始為首部行,connection 字段告訴客戶傳送完報文後關閉 tcp 連線,date 字段指示伺服器產生並傳送響應報文的日期和時間。server 字段表示該報文是由一台 apache web 伺服器產生。last-modified 字段指示物件最後修改的日期和時間,對於 web 快取記憶體伺服器而言,該欄位非常重要。content-length 指示了實體部分的位元組數,即被傳送物件的實際大小。content-type 字段指示物件的型別,這裡的物件是 html 檔案。

HTTP協議學習 一 概念篇

1 不同版本概述 http 協議始於三十年前蒂姆 伯納斯 李的一篇 http 0.9 是個簡單的文字協議,只能獲取文字資源 http 1.0 確立了大部分現在使用的技術,但它不是正式標準 http 1.1 是目前網際網路上使用最廣泛的協議,功能也非常完善 文字傳輸,即使檔案等 上傳本身是二進位制,但...

HTTP協議系列教材 (一) 概念

http 超文字傳輸協議hypertexttransferprotocol 當我們在瀏覽器的位址列輸入乙個位址的時候,就能夠訪問伺服器的某個頁面 這個過程本身就是兩個應用程式之間的互動,乙個應用程式是瀏覽器,另乙個應用程式是伺服器。協議是什麼?協議就是不同的應用程式之間按照事先做好的約定進行的通訊。...

http協議詳解(一)HTTP協議基礎

最近在看一些http的東西,http比較雜,大致整理了一下,用思維導圖的方式呈現了出來。我會分幾個板塊來介紹http協議,具體的板塊也在下面的思維導圖中標註出來了,盡量以簡潔的方式為大家呈現http的內容。初寫部落格,文中有些紕漏的地方還請大家指點。http 超文字傳輸協議,本質上是一種通訊協議。用...