Python 爬蟲教程 2 HTTP協議

2021-07-26 18:32:54 字數 2072 閱讀 1622

http是一種應用層協議,是一種在網路中進行資料傳輸時,收發雙方提前達成的某些共同約定,http 協議涵蓋的內容極廣,而這裡我們主要關注 http 在報文格式上的約定。首先會對如何對 http 中資源進行定位,然後介紹下 http 報文結構,接下來介紹下 http 的請求和響應,最後給出乙個示例。

url 的全稱是(統一資源定位符),通過對網路中資源位置的描述來對其進行唯一的標識,這並不屬於 http 協議的內容,但卻十分重要。我們在網際網路上無時無刻不在使用著 url,例如在用瀏覽器訪問**時在位址列所輸入的就是乙個 url,它唯一的標識了乙個**。

用我在 csdn 的部落格位址來舉例,這就是乙個 url,它由三部分組成:

- 第一部分http://,這一部分是 url 方案,它用來標識可以用什麼樣的協議訪問資源,除了 http 以外還有許多常用的方案,例如:檔案伺服器採用的 ftp 和遠端登入伺服器用的 sftp 等。

- 第二部分blog.csdn.net,這是指伺服器的位置,也就是我們常說的乙個**的網域名稱。

- 第三部分/preyta,這是指資源在伺服器上的路徑,這個路徑不是實際的檔案路徑,只是乙個對資源的標識。

上面三個部分組合在一起唯一的標識了乙個資源可以通過什麼協議訪問,在哪乙個伺服器上,是哪乙個資源。

以網頁瀏覽為例,當我們在瀏覽器開啟乙個網頁的時候就是從客戶端傳送了一次 http 請求,伺服器接收到該請求,返回乙個對應的 http 響應,瀏覽器對響應內容進行解析並顯示在螢幕上。這就是乙個 http 的全過程。

在使用 http 協議進行交流時,實際上傳送和接收的都是 http 報文,而由上面的資料互動流程可以看出,實際上有兩次資料互動,一次請求一次響應,所以相對應的也有兩種不同的報文,分別為請求報文和響應報文。

如下圖所示,請求報文由三部分組成:

請求的 url 就是上一節提到的,但是只包括了資源在伺服器上的路徑這個部分。

最後乙個是 http 版本,由於 http 在發展中有一些變化,各版本之間存在著差異,為了保證客戶端和伺服器的協議內容能夠匹配而新增了版本號。

報文頭

如果說起始行表明了本次請求的最基本描述,那麼報文頭則通過鍵值對的方式,提供了對傳輸的額外描述。

以圖中的請求為例,有兩個首部,分別是 accept 和 host,accept 告訴伺服器本客戶端只接收型別為 html 的文字資料,伺服器就會根據請求和實際的資源返回對應的響應;而 host 用於指明本次請求的伺服器資訊。http 定義的數量眾多的報文頭用於控制傳輸的方方面面,詳細的資料請自行翻閱相關書籍。

報文體

前面兩部分都是對請求的描述,這一部分終於是實實在在的通過 http 協議承載的實際資料了。但是在常用的 get 方法中,這個部分通常是空的,因為 get 方法不需要提交資料,僅僅是獲取資料;而 post 方法上傳一些檔案時,檔案就會以二進位制字串的形式包含在報文體裡。

和請求報文類似,響應報文也由三部分組成:

1. 起始行

這個起始行由兩部分組成,第乙個是 http 版本,和上面類似;另乙個是乙個數字,叫做狀態碼,表明了響應的狀態是成功,失敗還是其他情況。這裡的200是最常見的狀態碼表示成功。

2. 報文頭

和請求報文頭類似,只是請求和響應的報文頭的首部有一些區別,有一些報文頭是請求獨有的,有一些是響應獨有的,還有一些事通用的報文頭。上圖的 content-type 表示返回的報文體型別是 html 文件。而 content-length 指明了返回的報文體的長度。

3. 報文體

這一部分和前面請求報文裡的報文體內容類似,只是是由伺服器返回給客戶端的資料。我們通過瀏覽器獲取的網頁文件就是以 html 格式的資料放在這裡的。

參考資料

1. http 權威指南

前端(2)HTTP協議

http hypertext transport protocol 即超文字傳輸協議。這個協議詳細規定了瀏覽器和全球資訊網伺服器之間互相通訊的規則。http就是乙個通訊規則,通訊規則規定了客戶端傳送給伺服器的內容格式,也規定了伺服器傳送給客戶端的內容格式。其實我們要學習的就是這個兩個格式!客戶端傳送...

HTTP協議2 HTTP訊息結構

http是基於客戶端 服務端 c s 的架構模型,通過乙個可靠的鏈結來交換資訊,是乙個無狀態的請求 響應協議。乙個http 客戶端 是乙個應用程式 web瀏覽器或其他任何客戶端 通過連線到伺服器達到向伺服器傳送乙個或多個http的請求的目的。乙個http 伺服器 同樣也是乙個應用程式 通常是乙個we...

HTTP協議基礎 2 HTTP引數

前面一篇末尾說到了一些概念,這篇介紹http中的一部分引數,例如uri,日期格式。這些引數在請求或者響應中都會用到,通過學習和了解這些引數的用法,方便接下來http請求和http響應部分的學習。http版本 前面一篇說了有http 1.0 和http 1.1的區別,這裡說的http版本就是http ...