HTTP 協(xié)議通信基原理
HTTP 是我們進(jìn)行爬蟲的一個(gè)基礎(chǔ)之一,我們通過(guò) HTTT 協(xié)議才能順利爬取到 HTML 里面的內(nèi)容,HTTP 相當(dāng)于是一條道路,HTML 等網(wǎng)頁(yè)是道路的終點(diǎn),我們必須遵守 HTTP 的交通規(guī)則,才能高效的在這條道路上運(yùn)輸數(shù)據(jù)。
1. HTTP 的基本概念
Http(超文本傳輸協(xié)議) 是一種客戶端-服務(wù)端模型,使用超媒體文檔進(jìn)行傳輸?shù)?,?jiǎn)單的,無(wú)狀態(tài)的,無(wú)連接的,可擴(kuò)展的應(yīng)用層協(xié)議。
下面,我們一一來(lái)分析上述定義的幾個(gè)概念。
1.1 客戶端-服務(wù)端模型:
客戶端,是指發(fā)起請(qǐng)求的一方。也就是瀏覽器,或者指爬蟲程序。通過(guò)發(fā)起請(qǐng)求,來(lái)獲取想要的網(wǎng)頁(yè)。
服務(wù)端,請(qǐng)求的響應(yīng)端,是 web 服務(wù)端。web 服務(wù),是一個(gè)虛擬意思上的機(jī)器的概念??梢允且粋€(gè)計(jì)算機(jī)集群,也可以是一個(gè)軟件或者程序。
客戶端,通過(guò)發(fā)送一個(gè)請(qǐng)求給服務(wù)端,然后進(jìn)行等待。服務(wù)端按照客戶端的請(qǐng)求,返回客戶端需要的數(shù)據(jù)。這個(gè)過(guò)程,我們稱之為經(jīng)典的客戶端——服務(wù)端模型。
1.2 超文本文檔:
一個(gè)網(wǎng)頁(yè),其實(shí)就是一個(gè)超文本文檔。里面不僅包含了基本的文本信息和圖片視頻信息,也包含了豐富的超鏈接,用戶可以通過(guò)點(diǎn)擊超鏈接,來(lái)進(jìn)行互聯(lián)網(wǎng)的沖浪。
1.3 簡(jiǎn)單
指的是 HTTP 報(bào)文設(shè)計(jì)的簡(jiǎn)單易懂,對(duì)新手很友好,很容易上手,降低了學(xué)習(xí)門檻。
1.4 無(wú)狀態(tài)
是指在同一個(gè)連接中,不同的請(qǐng)求之間是沒(méi)有聯(lián)系的,這次的請(qǐng)求無(wú)法知道上次請(qǐng)求的上下文信息。但是,HTTP 又是有會(huì)話的,也就是說(shuō),我們可以通過(guò) Cookies 來(lái)解決不同請(qǐng)求的上下文信息共享。Cookie 的具體內(nèi)容,我們會(huì)在后面的章節(jié)進(jìn)行描述。
1.5 無(wú)連接
連接是又控制層控制的,無(wú)連接并不是指 HTTP 不需要控制層的連接,而是指每次連接指處理一次請(qǐng)求,請(qǐng)求結(jié)束,即端口連接。這樣設(shè)計(jì)的目的,是減少開(kāi)銷,提高效率。因?yàn)?,TCP 控制層的連接會(huì)消耗大量的系統(tǒng)資源。
1.6 可擴(kuò)展
指的是 HTTP 的 Headers 部分比較容易擴(kuò)展。只需要在頭部中加入擴(kuò)展的新功能,就可以很方便的實(shí)現(xiàn)擴(kuò)展。
2. HTTP簡(jiǎn)單的工程流程
假如我們?cè)跒g覽器輸入慕課網(wǎng)地址:http://idcbgp.cn/
HTTP 的工作流程如下:
- 首先需要傳輸層建立連接,這個(gè)是 HTTP 的運(yùn)作的基礎(chǔ)之一,因?yàn)?HTTP 是應(yīng)用層,它是建立在傳輸層之上的。
- 然后發(fā)送一個(gè) HTTP 的請(qǐng)求報(bào)文如下:
GET / HTTP/1.1
Host: idcbgp.cn
Connection: keep-alive
Cache-Control: max-age=0
...
- 服務(wù)端會(huì)返回一段報(bào)文信息如下:
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=UTF-8
Content-Length: 49930
Connection: keep-alive
...
- 瀏覽器渲染服務(wù)器返回的信息,并關(guān)閉連接或者重用之前的連接。
以上就是 HTTP 的基本工作原理。關(guān)于請(qǐng)求與響應(yīng)的具體解釋,我們下一個(gè)小節(jié)會(huì)深入講解。
3. 小結(jié)
這一小節(jié),我們講解了 HTTP 的基本概念,熟悉了 HTTP 簡(jiǎn)單的工作流程。其實(shí) HTTP 協(xié)議比較復(fù)雜,感興趣的讀者可以更加深入的去學(xué)習(xí) HTTP 底層的原理,對(duì)以后開(kāi)發(fā)爬蟲以及 WEB 應(yīng)用都有很大的幫助。