HTTP基本原理
在本節(jié)我們會詳細(xì)了解 HTTP 的基本原理,了解在瀏覽器中敲入一個 URL 到獲取網(wǎng)頁內(nèi)容發(fā)生了一個怎樣的過程,了解了這些內(nèi)容,有助于去進(jìn)一步了解爬蟲的基本原理。小編推薦大家加一下這個群:330637182 這個群里好幾千人了!大家遇到啥問題都會在里面交流!而且免費分享零基礎(chǔ)入門料資料web開發(fā) 爬蟲資料一整套!是個非常好的學(xué)習(xí)交流地方!也有程序員大神給大家熱心解答各種問題!很快滿員了。欲進(jìn)從速哦!各種PDF等你來下載!全部都是免費的哦!所以小編在群里等你們過來一起交流學(xué)習(xí)呢!
Python程序員
2 個月前
HTTP基本原理
在本節(jié)我們會詳細(xì)了解 HTTP 的基本原理,了解在瀏覽器中敲入一個 URL 到獲取網(wǎng)頁內(nèi)容發(fā)生了一個怎樣的過程,了解了這些內(nèi)容,有助于去進(jìn)一步了解爬蟲的基本原理。
1. URI、URL
在了解 HTTP 之前我們先了解一下 URI 和 URL。我們經(jīng)常會聽到 URI 和 URL 兩個術(shù)語,URI 全稱為 Uniform Resource Identifier,即統(tǒng)一資源標(biāo)志符,URL 全稱為 Universal Resource Locator,即統(tǒng)一資源定位符。
舉例來說,https://github.com/favicon.ico,這是 GitHub 的網(wǎng)站圖標(biāo)鏈接,它是一個 URL,也是一個 URI,即有這樣的一個圖標(biāo)資源,我們用 URL/URI 來唯一指定了它的訪問方式,這其中包括了訪問協(xié)議 https、訪問路徑/即根目錄,資源名稱 favicon.ico,通過這樣的一個鏈接我們便可以從互聯(lián)網(wǎng)上找到這個資源,這就是 URL/URI。
URL 是 URI 的子集,也就是說每個 URL 都是 URI,但不是每個 URI 都是 URL。那么怎樣的 URI 不是 URL 呢?URI 還包括一個子類叫做 URN,它的全稱為 Universal Resource Name,即統(tǒng)一資源名稱。URN 只命名資源而不指定如何定位資源,如 urn:isbn:0451450523,它指定了一本書的 ISBN,可以唯一標(biāo)識這一本書,但是沒有指定到哪里定位這本書,這就是 URN,URL、URN、URI 的關(guān)系可以用圖表示如下:
URL、URN、URI 關(guān)系圖
但是在目前的互聯(lián)網(wǎng),URN 的使用非常少,所以幾乎所有的 URI 都是 URL,所以一般的網(wǎng)頁鏈接我們可以稱之為 URL,也可以稱之為 URI,我個人習(xí)慣稱之為 URL。
是建立一個信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?/p>
確認(rèn)網(wǎng)站的真實性,凡是使用了 https 的網(wǎng)站,都可以通過點擊瀏覽器地址欄的鎖頭標(biāo)志來查看網(wǎng)站認(rèn)證之后的真實信息,也可以通過 CA 機(jī)構(gòu)頒發(fā)的安全簽章來查詢。
現(xiàn)在越來越多的網(wǎng)站和 APP 都已經(jīng)向 HTTPS 方向發(fā)展。例如:
蘋果公司強(qiáng)制所有 iOS App 在 2017 年 1 月 1 日 前全部改為使用 HTTPS 加密,否則 APP 就無法在應(yīng)用商店上架。
谷歌從 2017 年 1 月推出的 Chrome 56 開始,對未進(jìn)行 HTTPS 加密的網(wǎng)址鏈接亮出風(fēng)險提示,即在地址欄的顯著位置提醒用戶“此網(wǎng)頁不安全”。
騰訊微信小程序的官方需求文檔要求后臺使用 HTTPS 請求進(jìn)行網(wǎng)絡(luò)通信,不滿足條件的域名和協(xié)議無法請求。
12306 頁面
這是因為 12306 的 CA 證書是中國鐵道部自己頒發(fā)給自己的,而這個證書是不被官方機(jī)構(gòu)認(rèn)可的,所以這里證書驗證就不會通過而提示這樣的話,但是實際上它的數(shù)據(jù)傳輸依然是經(jīng)過 SSL 加密的。我們?nèi)绻廊∵@樣的站點就需要設(shè)置忽略證書的選項,否則會提示 SSL 鏈接錯誤,在后文會進(jìn)行詳細(xì)說明。
網(wǎng)絡(luò)請求記錄
這一個條目的各列分別代表:
第一列 Name,即 Request 的名稱。一般會用URL的最后一部分內(nèi)容當(dāng)做名稱。
第二列 Status,即 Response 的狀態(tài)碼。這里顯示為 200,代表 Response 是正常的,通過狀態(tài)碼我們可以判斷發(fā)送了 Request 之后是否得到了正常的 Response。
第三列 Type,即 Request 請求的文檔類型。這里為 document,代表我們這次請求的是一個 HTML 文檔,內(nèi)容就是一些 HTML 代碼。
第四列 Initiator,即請求源。用來標(biāo)記 Request 是由哪個對象或進(jìn)程發(fā)起的。
第五列 Size,即從服務(wù)器下載的文件和請求的資源大小。如果是從緩存中取得的資源則該列會顯示 from cache。
第六列 Time,即發(fā)起 Request 到獲取到 Response 所用的總時間。
第七列 Timeline,即網(wǎng)絡(luò)請求的可視化瀑布流。
方法描述
GET請求指定的頁面信息,并返回實體主體。
HEAD類似于 GET 請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報頭。
POST向指定資源提交數(shù)據(jù)進(jìn)行處理請求,數(shù)據(jù)被包含在請求體中。
PUT從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。
DELETE請求服務(wù)器刪除指定的頁面。
CONNECTHTTP/1.1 協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
OPTIONS允許客戶端查看服務(wù)器的性能。
TRACE回顯服務(wù)器收到的請求,主要用于測試或診斷。
詳細(xì)信息
在登錄之前我們填寫了用戶名和密碼信息,提交時就這些內(nèi)容就會以 Form Data 的形式提交給服務(wù)器,此時注意 Request Headers 中指定了 Content-Type 為 application/x-www-form-urlencoded,只有設(shè)置 Content-Type 為 application/x-www-form-urlencoded 才會以 Form Data 形式提交,另外我們也可以將 Content-Type 設(shè)置為 application/json 來提交 Json 數(shù)據(jù),或者設(shè)置為 multipart/form-data 來上傳文件。
下面列出了 Content-Type 和 POST 提交數(shù)據(jù)方式的關(guān)系:
Content-Type提交數(shù)據(jù)方式
application/x-www-form-urlencodedForm 表單提交
multipart/form-data表單文件上傳提交
application/json序列化 Json 數(shù)據(jù)提交
text/xmlXML 數(shù)據(jù)提交
在爬蟲中如果我們要構(gòu)造 POST 請求需要注意這幾種 Content-Type,了解各種請求庫的各個參數(shù)設(shè)置時使用的是哪種 Content-Type,不然可能會導(dǎo)致 POST 提交后得不到正常的 Response。
以上便是對 Request 各部分內(nèi)容的解釋。
狀態(tài)碼說明詳情
100繼續(xù)請求者應(yīng)當(dāng)繼續(xù)提出請求。服務(wù)器已收到請求的一部分,正在等待其余部分。
101切換協(xié)議請求者已要求服務(wù)器切換協(xié)議,服務(wù)器已確認(rèn)并準(zhǔn)備切換。
200成功服務(wù)器已成功處理了請求。
201已創(chuàng)建請求成功并且服務(wù)器創(chuàng)建了新的資源。
202已接受服務(wù)器已接受請求,但尚未處理。
203非授權(quán)信息服務(wù)器已成功處理了請求,但返回的信息可能來自另一來源。
204無內(nèi)容服務(wù)器成功處理了請求,但沒有返回任何內(nèi)容。
205重置內(nèi)容服務(wù)器成功處理了請求,內(nèi)容被重置。
206部分內(nèi)容服務(wù)器成功處理了部分請求。
300多種選擇針對請求,服務(wù)器可執(zhí)行多種操作。
301永久移動請求的網(wǎng)頁已永久移動到新位置,即永久重定向。
302臨時移動請求的網(wǎng)頁暫時跳轉(zhuǎn)到其他頁面,即暫時重定向。
303查看其他位置如果原來的請求是 POST,重定向目標(biāo)文檔應(yīng)該通過 GET 提取。
304未修改此次請求返回的網(wǎng)頁未修改,繼續(xù)使用上次的資源。
305使用代理請求者應(yīng)該使用代理訪問該網(wǎng)頁。
307臨時重定向請求的資源臨時從其他位置響應(yīng)。
400錯誤請求服務(wù)器無法解析該請求。
401未授權(quán)請求沒有進(jìn)行身份驗證或驗證未通過。
403禁止訪問服務(wù)器拒絕此請求。
404未找到服務(wù)器找不到請求的網(wǎng)頁。
405方法禁用服務(wù)器禁用了請求中指定的方法。
406不接受無法使用請求的內(nèi)容響應(yīng)請求的網(wǎng)頁。
407需要代理授權(quán)請求者需要使用代理授權(quán)。
408請求超時服務(wù)器請求超時。
409沖突服務(wù)器在完成請求時發(fā)生沖突。
410已刪除請求的資源已永久刪除。
411需要有效長度服務(wù)器不接受不含有效內(nèi)容長度標(biāo)頭字段的請求。
412未滿足前提條件服務(wù)器未滿足請求者在請求中設(shè)置的其中一個前提條件。
413請求實體過大請求實體過大,超出服務(wù)器的處理能力。
414請求 URI 過長請求網(wǎng)址過長,服務(wù)器無法處理。
415不支持類型請求的格式不受請求頁面的支持。
416請求范圍不符頁面無法提供請求的范圍。
417未滿足期望值服務(wù)器未滿足期望請求標(biāo)頭字段的要求。
500服務(wù)器內(nèi)部錯誤服務(wù)器遇到錯誤,無法完成請求。
501未實現(xiàn)服務(wù)器不具備完成請求的功能。
502錯誤網(wǎng)關(guān)服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)。
503服務(wù)不可用服務(wù)器目前無法使用。
504網(wǎng)關(guān)超時服務(wù)器作為網(wǎng)關(guān)或代理,但是沒有及時從上游服務(wù)器收到請求。
505HTTP 版本不支持服務(wù)器不支持請求中所用的 HTTP 協(xié)議版本。