印刷網(wǎng)站模板下載湛江百度seo公司
前言
爬蟲(chóng)需要基礎(chǔ)知識(shí),HTTP協(xié)議只是個(gè)開(kāi)始,除此之外還有很多,我們慢慢來(lái)記錄。
今天的HTTP協(xié)議,會(huì)有助于我們更好的了解網(wǎng)絡(luò)。
一、什么是HTTP協(xié)議
(1)定義
HTTP(超文本傳輸協(xié)議,HyperText Transfer Protocol)是用于在網(wǎng)絡(luò)上進(jìn)行數(shù)據(jù)通信的協(xié)議,尤其是用于網(wǎng)頁(yè)的傳輸。
簡(jiǎn)單來(lái)說(shuō),就是專門把超文本數(shù)據(jù)從網(wǎng)絡(luò)上傳輸?shù)奖镜貫g覽器上的一個(gè)協(xié)議
我們也經(jīng)常見(jiàn)它,比如網(wǎng)站前面的前綴:
當(dāng)然,上圖有些不太正確,但?HTTPS 其實(shí)是HTTP的升級(jí)版,二者其實(shí)差不太多。
(2)HTTPS
那么HTTPS到底有什么不同呢?
HTTPS的全稱是Hypertext Transfer Protocol Secure。相較于HTTP多了一個(gè)Secure
所以我們應(yīng)該知道,哪里升級(jí)了。
簡(jiǎn)單來(lái)說(shuō),就是在HTTP的基礎(chǔ)上通過(guò)傳輸加密和身份認(rèn)證保證了傳輸過(guò)程的安全性
Tips:HTTPS 主要由兩部分組成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過(guò) TLS 進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。(了解即可)
(3)URI和URL
還有些專業(yè)術(shù)語(yǔ),諸如URI和URL?:
- URI(統(tǒng)一資源標(biāo)識(shí)符):用于標(biāo)識(shí)資源的字符串。
- URL(統(tǒng)一資源定位符):一種特定類型的URI,用于定位資源并提供如何訪問(wèn)這些資源的信息。
- URN:統(tǒng)一資源名稱
顧名思義,URI讓我們可以唯一標(biāo)識(shí)一個(gè)資源。URL則讓我們可以去定位一個(gè)資源。
比如一個(gè)網(wǎng)址https://www.example.com
我們可以把這整個(gè)鏈接叫做URI,因?yàn)檫@個(gè)網(wǎng)址標(biāo)識(shí)了一個(gè)資源。
而這個(gè)鏈接,也叫做URL,因?yàn)檫@個(gè)網(wǎng)址的鏈接也同樣定位了一個(gè)資源。
那他們?cè)趺磪^(qū)分呢??
URI包括了URL,因?yàn)?/strong>URI=URL和URN。
比如,一本書的編號(hào)111,這個(gè)編號(hào)就是URN。
所以該編號(hào)也可以叫做URI,因?yàn)樗瑯訕?biāo)識(shí)了一個(gè)資源,但是它不能叫做URL了,因?yàn)樵摼幪?hào)并沒(méi)有定位這個(gè)資源,我們只知道它叫什么,卻不知道去哪里可以找到他。
二、HTTP請(qǐng)求過(guò)程
(1)請(qǐng)求過(guò)程
我們?cè)诰W(wǎng)頁(yè)最上面的導(dǎo)航欄上輸入網(wǎng)址,按下回車,然后出現(xiàn)一個(gè)新網(wǎng)頁(yè)。
這個(gè)過(guò)程就是瀏覽器向某網(wǎng)站發(fā)送了一個(gè)請(qǐng)求,然后網(wǎng)站進(jìn)行處理,最后網(wǎng)站回饋一個(gè)響應(yīng),瀏覽器解析后展現(xiàn)出來(lái)。
(2)相關(guān)名詞介紹
(注:以下名詞了解即可)?
為了更好的說(shuō)明該過(guò)程,我們可以鼠標(biāo)右鍵用檢查功能來(lái)具體顯示一下請(qǐng)求和響應(yīng):
然后切換到Network面板,再刷新一下網(wǎng)頁(yè):
即可看到很多行的東西,每一行就代表一次? 請(qǐng)求-響應(yīng)? 過(guò)程
我們仔細(xì)觀察這個(gè)界面的各列:
其中,各列含義如下
- Name:請(qǐng)求界面的名稱
- Status:響應(yīng)狀態(tài)碼,通過(guò)狀態(tài)碼顯示,可以判定響應(yīng)是否正常。
- Type:請(qǐng)求文檔的類型。
- Initiator:請(qǐng)求源,用來(lái)標(biāo)記是哪個(gè)對(duì)象或進(jìn)程發(fā)起的請(qǐng)求。
- Size:請(qǐng)求資源大小(如果是緩存中提取的資源,該列顯示from cache)
- Time:從發(fā)起請(qǐng)求到獲得響應(yīng)所花總時(shí)間。
- Waterfall:網(wǎng)絡(luò)請(qǐng)求可視化瀑布流。
- (有時(shí)會(huì)有Protocol:請(qǐng)求協(xié)議類型,http1.1代表HTTP1.1版本,h2代表HTTP2.0版本)
若單擊某列,則會(huì)顯示更詳細(xì)的信息:
在General部分:
- Request URL :請(qǐng)求的URL
- Request Method:請(qǐng)求方法
- Status Code:響應(yīng)狀態(tài)碼
- Remote Address:遠(yuǎn)程服務(wù)器的地址和端口
- Referre Policy:為判別策略
- Response Headers:響應(yīng)頭
- Request Headers:請(qǐng)求頭
以上名詞可能有些說(shuō)的不太清楚,現(xiàn)在我們具體來(lái)看一看各部分,到底是干什么的
三、請(qǐng)求部分
請(qǐng)求,即Request。
由用戶發(fā)往服務(wù)器的信息。包括四大部分:請(qǐng)求方法、請(qǐng)求網(wǎng)址、請(qǐng)求頭、請(qǐng)求體。?
(1)請(qǐng)求方法
請(qǐng)求方法,客戶端請(qǐng)求服務(wù)器時(shí)的方式
常見(jiàn)的有兩種:GET請(qǐng)求、POST請(qǐng)求
比如:
GET請(qǐng)求:
請(qǐng)求獲取指定資源,如請(qǐng)求頁(yè)面返回內(nèi)容
當(dāng)我們?cè)跒g覽器最上面輸入網(wǎng)址并按下回車,這就是發(fā)起了GET請(qǐng)求。
POST請(qǐng)求:
向指定資源提交數(shù)據(jù),通常用于表單提交或者上傳文件。
當(dāng)我們登陸網(wǎng)站,輸入賬號(hào)密碼后,點(diǎn)擊提交后,這就是發(fā)起了POST請(qǐng)求。
那么二者有什么具體區(qū)別呢?
- GET請(qǐng)求的參數(shù)包括在URL,POST請(qǐng)求的數(shù)據(jù)包括在請(qǐng)求體中。
所以如果打開(kāi)某網(wǎng)站某板塊某界面的某圖片后,這時(shí)我們會(huì)在上面的網(wǎng)址中看到該圖片的路徑,這就是GET請(qǐng)求該圖片的參數(shù) - GET請(qǐng)求提交數(shù)據(jù)最大1024字節(jié),POST請(qǐng)求沒(méi)有限制。
所以綜上,當(dāng)我們提交賬號(hào)密碼時(shí),最好選擇POST,否則GET會(huì)將密碼顯示在網(wǎng)址中暴露哦~
當(dāng)然除此之外,還有很多請(qǐng)求,不過(guò)并不常用,匯總?cè)缦?#xff1a;
- GET:請(qǐng)求獲取指定資源。GET 請(qǐng)求不應(yīng)包含請(qǐng)求體,且一般用于獲取數(shù)據(jù)。
- POST:向指定資源提交數(shù)據(jù),通常用于表單提交或者上傳文件。POST 請(qǐng)求可以包含請(qǐng)求體,用于傳送數(shù)據(jù)。
- PUT:向指定資源上傳數(shù)據(jù),通常用于更新資源的狀態(tài)。PUT 請(qǐng)求一般是冪等的,即多次相同的請(qǐng)求會(huì)得到相同的結(jié)果。
- DELETE:請(qǐng)求刪除指定資源。
- PATCH:部分更新指定資源的數(shù)據(jù)。與 PUT 的區(qū)別是,PATCH 只更新資源的一部分,而 PUT 會(huì)替換整個(gè)資源。
- HEAD:類似 GET 請(qǐng)求,但只獲取響應(yīng)的頭部信息,不返回實(shí)際的資源數(shù)據(jù)。
- OPTIONS:請(qǐng)求服務(wù)器,詢問(wèn)支持哪些 HTTP 方法。常用于跨域請(qǐng)求中的預(yù)檢請(qǐng)求。
(2)請(qǐng)求網(wǎng)址
網(wǎng)址格式如下:
協(xié)議://主機(jī)名:端口號(hào)/路徑?查詢字符串#片段標(biāo)識(shí)符
說(shuō)明:
- 協(xié)議(Scheme):指定訪問(wèn)資源所使用的協(xié)議。常見(jiàn)的協(xié)議包括:
http
?或?https
(超文本傳輸協(xié)議)、
ftp
(文件傳輸協(xié)議)、
mailto
(用于電子郵件地址)、
file
(本地文件) - 主機(jī)名(Host):指定資源所在的服務(wù)器的域名或 IP 地址。
通常為一個(gè)域名,如?www.example.com
,
或者是 IP 地址,如?192.168.1.1
。 - 端口號(hào)(Port)(可寫可不寫):指定服務(wù)器的端口,通常省略。
默認(rèn)情況下:http
?默認(rèn)端口為 80、https
?默認(rèn)端口為 443。
如果指定了非默認(rèn)端口,則需要在主機(jī)名后加上端口號(hào),用冒號(hào)分隔,如?www.example.com:8080
。 - 路徑(Path):指定請(qǐng)求資源在服務(wù)器上的位置。
例如,/products/123
?表示訪問(wèn)?/products/123
?這個(gè)路徑的資源。 - 查詢字符串(Query)(可寫可不寫):以?
?
?開(kāi)頭,包含一個(gè)或多個(gè)鍵值對(duì),用于傳遞參數(shù)。
例如,?id=123&name=abc
,查詢字符串由參數(shù)名和值組成,多個(gè)參數(shù)用?&
?分隔。 - 片段標(biāo)識(shí)符(Fragment)(可寫可不寫):以?
#
?開(kāi)頭,指向文檔中的一個(gè)特定位置。
用于指定頁(yè)面內(nèi)的某個(gè)部分。例如,#section2
?指向頁(yè)面的第二個(gè)部分。
舉個(gè)例子:
https://www.example.com:8080/products/123?id=456&color=red#review
解釋:?
- 協(xié)議:
https
- 主機(jī)名:
www.example.com
- 端口號(hào):
8080
- 路徑:
/products/123
- 查詢字符串:
?id=456&color=red
- 片段標(biāo)識(shí)符:
#review
(3)請(qǐng)求頭
請(qǐng)求頭是 HTTP 請(qǐng)求中的一部分,它包含了關(guān)于客戶端、請(qǐng)求以及數(shù)據(jù)的附加信息。
客戶端通過(guò)它向服務(wù)器傳遞元數(shù)據(jù),幫助服務(wù)器理解請(qǐng)求的內(nèi)容、用戶的偏好、客戶端環(huán)境等。
舉個(gè)例子:
請(qǐng)求頭就像你在向別人請(qǐng)求東西時(shí)提供的一些附加信息。
假設(shè)你在網(wǎng)上買東西,除了告訴商家你想買的產(chǎn)品,還會(huì)提供一些其他信息,比如:
你用的是什么設(shè)備(是手機(jī)還是電腦)
你能接受的商品類型(比如希望商品圖片清晰,或者只想看某種品牌的商品)
這些附加信息就像是請(qǐng)求頭里的內(nèi)容,它們幫助商家(服務(wù)器)了解你具體的需求,確保你能收到最合適的產(chǎn)品。
所以你要訪問(wèn)一個(gè)網(wǎng)頁(yè),你的請(qǐng)求頭可能包含以下信息:
(注:了解即可)?
1.?Host
-
指定請(qǐng)求的服務(wù)器域名或 IP 地址。從 HTTP/1.1 版本開(kāi)始,這是必需的頭部字段。
-
示例:
Host: www.example.com
2.?User-Agent
-
簡(jiǎn)稱UA。表示發(fā)送請(qǐng)求的客戶端軟件類型(如瀏覽器、操作系統(tǒng)等)。爬蟲(chóng)時(shí)加上此部分可以偽裝成瀏覽器。
-
示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
3.?Accept
-
指定客戶端能夠處理的響應(yīng)內(nèi)容類型。通常用于指定請(qǐng)求的數(shù)據(jù)格式
-
示例:
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8
4.?Accept-Language
-
告訴服務(wù)器客戶端能夠理解的語(yǔ)言。例如,可以告訴服務(wù)器希望獲取中文或英文的內(nèi)容。
-
示例:
Accept-Language: en-US,en;q=0.5
5.?Content-Type
-
僅在請(qǐng)求體中有數(shù)據(jù)時(shí)使用,指定請(qǐng)求體的媒體類型。例如,表單提交時(shí),數(shù)據(jù)的格式是?
application/x-www-form-urlencoded
,上傳文件時(shí)是?multipart/form-data
。 -
示例:
Content-Type: application/json
-
用于身份驗(yàn)證,攜帶認(rèn)證信息,如令牌或基本認(rèn)證信息。常用于需要用戶驗(yàn)證的資源。
-
示例:
Authorization: Bearer <token>
-
客戶端向服務(wù)器發(fā)送的 Cookie 信息,服務(wù)器根據(jù)該信息識(shí)別用戶狀態(tài)(如登錄狀態(tài))。
-
示例:
Cookie: sessionid=abc123; user=JohnDoe
8.?Accept-Encoding
-
告訴服務(wù)器客戶端支持的編碼方式,通常用于壓縮響應(yīng)體。
-
示例:
Accept-Encoding: gzip, deflate, br
9.?Connection
-
表示是否保持持久連接,決定在請(qǐng)求完成后是否保持與服務(wù)器的連接。
-
示例:
Connection: keep-alive
10.?Referer
-
表示來(lái)自哪個(gè) URL 的請(qǐng)求,通常用于了解用戶訪問(wèn)的來(lái)源頁(yè)面。
-
示例:
Referer: https://www.example.com/previous-page
(4)請(qǐng)求體
請(qǐng)求體是 HTTP 請(qǐng)求中的一部分,主要用于攜帶客戶端發(fā)送給服務(wù)器的實(shí)際數(shù)據(jù)內(nèi)容。
可以理解為你在向服務(wù)器請(qǐng)求某項(xiàng)服務(wù)時(shí),所附帶的具體信息或者數(shù)據(jù)。
舉個(gè)例子:
如果你填寫了一個(gè)網(wǎng)上表單,提交了你的個(gè)人信息(比如名字、地址、電子郵件等),這些信息就是通過(guò)請(qǐng)求體發(fā)送到服務(wù)器的。
(Tips:對(duì)于請(qǐng)求體來(lái)說(shuō),一般是POST請(qǐng)求的表單數(shù)據(jù),對(duì)于GET請(qǐng)求,請(qǐng)求體為空)
對(duì)于請(qǐng)求頭和請(qǐng)求體的區(qū)別?
- 請(qǐng)求頭:
包含一些附加信息(比如瀏覽器類型、請(qǐng)求語(yǔ)言、是否有登錄狀態(tài)等)
幫助服務(wù)器理解如何處理請(qǐng)求。 - 請(qǐng)求體:
包含實(shí)際的數(shù)據(jù)內(nèi)容,是請(qǐng)求的核心部分
比如你提交的表單數(shù)據(jù)、上傳的文件等。
四、響應(yīng)部分
響應(yīng),即Response。
由服務(wù)器給用戶的信息。包括三部分:響應(yīng)狀態(tài)碼、響應(yīng)頭、響應(yīng)體。
(1)響應(yīng)狀態(tài)碼
就像前文所說(shuō),這就是根據(jù)給出的數(shù)字,來(lái)判定響應(yīng)是否正常。
比如,200表示正常、404表示找不到等,都是常見(jiàn)狀態(tài)碼。
下面匯總了常見(jiàn)的狀態(tài)碼及錯(cuò)誤原因:
1.?1xx:信息性狀態(tài)碼
這些狀態(tài)碼表示請(qǐng)求已被接收,正在繼續(xù)處理。
-
100 Continue:表示客戶端可以繼續(xù)發(fā)送請(qǐng)求的其余部分(通常用于大文件上傳時(shí),客戶端先發(fā)送請(qǐng)求頭,服務(wù)器返回 100 狀態(tài)碼,客戶端再發(fā)送請(qǐng)求體)。
2.?2xx:成功狀態(tài)碼
這些狀態(tài)碼表示請(qǐng)求已成功被處理。
-
200 OK:請(qǐng)求成功,服務(wù)器返回請(qǐng)求的資源。
-
201 Created:請(qǐng)求成功,服務(wù)器創(chuàng)建了新的資源(通常用于 POST 請(qǐng)求)。
-
204 No Content:請(qǐng)求成功,但服務(wù)器沒(méi)有返回任何內(nèi)容(常見(jiàn)于刪除操作)。
3.?3xx:重定向狀態(tài)碼
這些狀態(tài)碼表示請(qǐng)求需要進(jìn)一步的操作才能完成(通常是頁(yè)面重定向)。
-
301 Moved Permanently:請(qǐng)求的資源已被永久移到新的位置,響應(yīng)中會(huì)帶有新的 URL。
-
302 Found:請(qǐng)求的資源臨時(shí)移動(dòng)到其他位置,客戶端會(huì)按照新 URL 繼續(xù)請(qǐng)求。
-
304 Not Modified:資源未修改,客戶端可以使用緩存的副本。
4.?4xx:客戶端錯(cuò)誤狀態(tài)碼
這些狀態(tài)碼表示請(qǐng)求有錯(cuò)誤,客戶端需要修正請(qǐng)求后再試。
-
400 Bad Request:請(qǐng)求無(wú)效,服務(wù)器無(wú)法理解請(qǐng)求。
-
401 Unauthorized:請(qǐng)求未授權(quán),通常需要提供身份驗(yàn)證(如登錄)。
-
403 Forbidden:服務(wù)器拒絕請(qǐng)求,即使用戶已認(rèn)證。
-
404 Not Found:請(qǐng)求的資源不存在或無(wú)法找到。
-
405 Method Not Allowed:請(qǐng)求方法不被允許(例如,服務(wù)器只允許 GET 請(qǐng)求,但客戶端使用了 POST 請(qǐng)求)。
5.?5xx:服務(wù)器錯(cuò)誤狀態(tài)碼
這些狀態(tài)碼表示服務(wù)器未能完成有效請(qǐng)求,通常是服務(wù)器本身的問(wèn)題。
-
500 Internal Server Error:服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求。
-
502 Bad Gateway:服務(wù)器作為網(wǎng)關(guān)或代理時(shí),收到來(lái)自上游服務(wù)器的無(wú)效響應(yīng)。
-
503 Service Unavailable:服務(wù)器暫時(shí)無(wú)法處理請(qǐng)求,通常是因?yàn)榉?wù)器超負(fù)荷或正在維護(hù)。
- 504 Gateway Timeout:服務(wù)器作為網(wǎng)關(guān)或代理時(shí),未能在規(guī)定時(shí)間內(nèi)從上游服務(wù)器獲取響應(yīng)。
(2)響應(yīng)頭
響應(yīng)頭是服務(wù)器在響應(yīng)客戶端請(qǐng)求時(shí),附加在響應(yīng)消息中的一些信息。
這些信息主要用于描述服務(wù)器的處理結(jié)果、返回的數(shù)據(jù)類型、緩存策略等。
可以理解為服務(wù)器對(duì)客戶端請(qǐng)求的“回饋”信息,告訴客戶端服務(wù)器的狀態(tài)、資源類型等。
下面為常用響應(yīng)頭:
-
Content-Type:指定響應(yīng)體的內(nèi)容類型(即數(shù)據(jù)的格式)。例如:
Content-Type: text/html
:返回的是 HTML 內(nèi)容。Content-Type: application/json
:返回的是 JSON 格式數(shù)據(jù)。Content-Type: image/png
:返回的是 PNG 圖片。
-
Content-Length:表示響應(yīng)體的大小,以字節(jié)為單位
-
Date:返回響應(yīng)的時(shí)間戳,表示服務(wù)器響應(yīng)的日期和時(shí)間
-
Server:表示服務(wù)器的類型和版本
-
Set-Cookie:服務(wù)器向客戶端發(fā)送的 cookie,用于保存客戶端的狀態(tài)信息。
(3)響應(yīng)體
響應(yīng)體是服務(wù)器在響應(yīng)客戶端請(qǐng)求時(shí),返回給客戶端的實(shí)際數(shù)據(jù)內(nèi)容。
舉個(gè)例子:
比如你請(qǐng)求一個(gè)網(wǎng)頁(yè)時(shí),響應(yīng)體就是返回的 HTML 內(nèi)容;你請(qǐng)求某個(gè)數(shù)據(jù)接口時(shí),響應(yīng)體就是返回的 JSON 數(shù)據(jù)。
如下圖所示:
當(dāng)我們打開(kāi)Preview中,看到的藍(lán)框內(nèi)的內(nèi)容,就是響應(yīng)體。
在爬蟲(chóng)時(shí),我們要做的,就是解析它!!!
它的常見(jiàn)內(nèi)容有:
-
HTML 頁(yè)面:如果你請(qǐng)求一個(gè)網(wǎng)頁(yè),響應(yīng)體通常是該網(wǎng)頁(yè)的 HTML 內(nèi)容。
例如,瀏覽器向服務(wù)器請(qǐng)求?https://example.com
,服務(wù)器返回一個(gè) HTML 頁(yè)面,響應(yīng)體就是網(wǎng)頁(yè)的 HTML 代碼。 -
JSON 數(shù)據(jù):在許多現(xiàn)代 Web 應(yīng)用中,通常使用 JSON 格式。
例如,發(fā)送一個(gè) GET 請(qǐng)求到一個(gè)數(shù)據(jù)接口,返回的響應(yīng)體是 JSON 數(shù)據(jù):
{ "name": "John Doe", "age": 30 } -
圖片或文件:如果請(qǐng)求的是一個(gè)文件(如圖片、視頻等),響應(yīng)體包含文件的內(nèi)容。
例如,瀏覽器請(qǐng)求一個(gè) PNG 圖片,服務(wù)器返回響應(yīng)體,其中包含該圖片的二進(jìn)制數(shù)據(jù)。 -
文本內(nèi)容:如果請(qǐng)求的是純文本數(shù)據(jù),響應(yīng)體可能直接是一些文本內(nèi)容。