爬蟲系列-掌握HTTP基本原理(重要)

程序員社區 2022-01-07 11:59:07 阅读数:320

系列 掌握 http 基本原理 基本

目錄

 

首先需要了解URL和URI的區別

URI和URL

超文本協議

HTTP和HTTPS

HTTP

HTTPS

HTTP請求過程

請求基礎認識

請求

請求方法

請求頭

請求體

響應

響應頭

響應體

首先需要了解URL和URI的區別

URI和URL

URL(Universal Resource Locator)即統一資源定比特符

URI(Uniform Resource Identifier)即統一資源標志符號

例如:

https://github.com/facicon.ico 即是一個URL,也是一個URI

即有這樣的一個圖標資源,用URL/URI來唯一指定了他的訪問方式。

這其中包含了訪問協議HTTPS、訪問路徑(即根目錄)和資源名稱favicon.ico

URL是URI的一個子集,也就是說每一個url都是uri,但不是每個uri都是url

url還包括一個子類叫做URN(Universal Resource Name)即統一資源名稱

URN只命名資源而不指定如何定比特資源

URL、URN和URI的關系圖

超文本協議

瀏覽器裏面看到的網頁就是超文本解析而成的,其網頁源代碼是一系列HTML代碼,裏面包含了一系列標簽

比如:

  • img 顯示圖片
  • p指定顯示段落
  • video顯示視頻

瀏覽器解析這些標簽後,便形成了我們平常看到的網頁,而網頁源代碼HTML就可以稱作超文本

HTTP和HTTPS

URL的開頭會有http或https,這個就是訪問資源需要的協議類型,有時還會看到ftp、sftp、smb開頭的URL。

ftp、sftp、smb都是指協議類型(在我們爬蟲抓取過程中,一般都是http或者https類型)

http和https的含義

HTTP

http(Hyper Text Transfer Protocol)中文名叫做超文本傳輸協議

用於從網絡傳輸超文本數據到本地瀏覽器的傳送協議,能保證高效而准確地傳送超文本文檔。

由萬維網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)共同合作指定的規範

HTTPS

https(Hyper Text Transfer Protocol over Secure Socket Layer)

是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入ssl層,簡稱為HTTPS安全基礎是ssl,因此通過它傳輸的內容都是經過ssl加密。

主要作用可以分為兩種:

  • 建立一個信息安全通道,來保證數據傳輸的安全
  • 確認網站的真實性,凡是使用https的網站,都可以通過點擊瀏覽器地址的鎖頭標志來查看網站認證後的真實信息,也可以通過CA機構頒發的安全簽章來查詢

HTTP請求過程

請求基礎認識

打開chrome瀏覽器,右擊並選擇“檢查”項即可打開瀏覽器的開發者工具。點擊Network,點擊All,可看到7列數據,如圖:

  1. name:請求的名稱,一般會將URL的最後一部分內容當作名稱
  2. status:響應的狀態碼,這裏顯示200,代錶響應正常,通過狀態碼,可以判斷發送了請求之後是否得到了正常響應。
  3. type:請求的文檔類型,第一行為document,代錶這次請求的是一個HTML文檔,內容就是一些HTML代碼。
  4. initiator:請求源,用來標志請求是由那個對象或者進程發起的
  5. size:從服務器下載的文件和請求的資源大小,如果是從緩存取得數據,則顯示from cache
  6. time:發起請求到獲取響應所用的總時間。
  7. waterfall:網絡請求的可視化瀑布流

點擊name裏第一條,如圖:

  1. General:【1】Reques url為請求的URL,【2】Request Method為請求的方法 【3】Status Code為響應狀態碼,【4】Remote Address為遠程服務器的地址和端口,【5】Referrer Policy為Referrer判斷策略
  2. Request Headers是請求頭,請求頭裏面帶有需要請求信息,例如瀏覽器標識、cookies、host等信息,這都是請求的一部分,服務器會根據請求頭的內的信息判斷是否合法,進而作出對應響應。
  3. Response Headers :該內容就是響應的一部分,例如其中包含了服務器的類型、文檔類型、日期等信息,瀏覽器接受到響應後,會解析響應內容,進而呈現網頁內容

請求

請求,由客戶端向服務端發出,可以分為4部分內容:

  1. 請求方法(Request Method)
  2. 請求的網址(Request URL)
  3. 請求頭(Request Headers)
  4. 請求體(Request Body)

請求方法

常見的請求方法有兩種:GET 和 POST。

在瀏覽器中直接輸入 URL 並回車,這便發起了一個 GET 請求,請求的參數會直接包含到 URL 裏。例如,在百度中搜索 Python,這就是一個 GET 請求,鏈接為 https://www.baidu.com/s?wd=Python,其中 URL 中包含了請求的參數信息,這裏參數 wd 錶示要搜尋的關鍵字。POST 請求大多在錶單提交時發起。比如,對於一個登錄錶單,輸入用戶名和密碼後,點擊 “登錄” 按鈕,這通常會發起一個 POST 請求,其數據通常以錶單的形式傳輸,而不會體現在 URL 中。

GET 和 POST 請求方法有如下區別。

  • GET 請求中的參數包含在 URL 裏面,數據可以在 URL 中看到,而 POST 請求的 URL 不會包含這些數據,數據都是通過錶單形式傳輸的,會包含在請求體中。
  • GET 請求提交的數據最多只有 1024 字節,而 POST 請求沒有限制。

平常遇到的絕大部分請求都是 GET 或 POST 請求,另外還有一些請求方法,如 HEAD、PUT、DELETE、OPTIONS、CONNECT、TRACE 等

請求頭

請求頭,用來說明服務器要使用的附加信息,比較重要的信息有 Cookie、Referer、User-Agent 等。下面簡要說明一些常用的頭信息。

  • Accept:請求報頭域,用於指定客戶端可接受哪些類型的信息。
  • Accept-Language:指定客戶端可接受的語言類型。
  • Accept-Encoding:指定客戶端可接受的內容編碼。
  • Host:用於指定請求資源的主機 IP 和端口號,其內容為請求 URL 的原始服務器或網關的比特置。從 HTTP 1.1 版本開始,請求必須包含此內容。
  • Cookie:也常用複數形式 Cookies,這是網站為了辨別用戶進行會話跟踪而存儲在用戶本地的數據。它的主要功能是維持當前訪問會話。例如,我們輸入用戶名和密碼成功登錄某個網站後,服務器會用會話保存登錄狀態信息,後面我們每次刷新或請求該站點的其他頁面時,會發現都是登錄狀態,這就是 Cookies 的功勞。Cookies 裏有信息標識了我們所對應的服務器的會話,每次瀏覽器在請求該站點的頁面時,都會在請求頭中加上 Cookies 並將其發送給服務器,服務器通過 Cookies 識別出是我們自己,並且查出當前狀態是登錄狀態,所以返回結果就是登錄之後才能看到的網頁內容。
  • Referer:此內容用來標識這個請求是從哪個頁面發過來的,服務器可以拿到這一信息並做相應的處理,如做來源統計、防盜鏈處理等。
  • User-Agent:簡稱 UA,它是一個特殊的字符串頭,可以使服務器識別客戶使用的操作系統及版本、瀏覽器及版本等信息。在做爬蟲時加上此信息,可以偽裝為瀏覽器;如果不加,很可能會被識別出為爬蟲。
  • Content-Type:也叫互聯網媒體類型(Internet Media Type)或者 MIME 類型,在 HTTP 協議消息頭中,它用來錶示具體請求中的媒體類型信息。例如,text/html 代錶 HTML 格式,image/gif 代錶 GIF 圖片,application/json 代錶 JSON 類型

請求體

請求體一般承載的內容是 POST 請求中的錶單數據,而對於 GET 請求,請求體則為空。

響應

響應,由服務端返回給客戶端,可以分為三部分:響應狀態碼(Response Status Code)、響應頭(Response Headers)和響應體(Response Body)。

響應頭

響應頭包含了服務器對請求的應答信息,如 Content-Type、Server、Set-Cookie 等。下面簡要說明一些常用的響應頭信息。

  • Date:標識響應產生的時間。
  • Last-Modified:指定資源的最後修改時間。
  • Content-Encoding:指定響應內容的編碼。
  • Server:包含服務器的信息,比如名稱、版本號等。
  • Content-Type:文檔類型,指定返回的數據類型是什麼,如 text/html 代錶返回 HTML 文檔,application/x-javascript 則代錶返回 JavaScript 文件,image/jpeg 則代錶返回圖片。
  • Set-Cookie:設置 Cookies。響應頭中的 Set-Cookie 告訴瀏覽器需要將此內容放在 Cookies 中,下次請求攜帶 Cookies 請求。
  • Expires:指定響應的過期時間,可以使代理服務器或瀏覽器將加載的內容更新到緩存中。如果再次訪問時,就可以直接從緩存中加載,降低服務器負載,縮短加載時間。

響應體

最重要的當屬響應體的內容了。響應的正文數據都在響應體中,比如請求網頁時,它的響應體就是網頁的 HTML 代碼;請求一張圖片時,它的響應體就是圖片的二進制數據。我們做爬蟲請求網頁後,要解析的內容就是響應體。

在瀏覽器開發者工具中點擊 Preview,就可以看到網頁的源代碼,也就是響應體的內容,它是解析的目標。

版权声明:本文为[程序員社區]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071159068251.html