爬蟲又稱網絡爬蟲,因此在講解爬蟲以前,咱們有必要了解一下什麼是網絡?網絡是由若干節點和鏈接這些節點的鏈路構成,而後網絡與網絡之間所串連成的龐大網絡叫作互聯網,而咱們今天要講的HTTP(HyperText Transfer Protocol 超文本傳輸協議)是互聯網上應用最爲普遍的一種網絡協議,它是由萬維網協會(World Wide Web Consortium)制定發佈。css
文章主要以一次HTTP請求的整個過程來說解(DNS解析不講):HTTP起源、TCP/IP協議、創建TCP鏈接、客戶端請求、服務端響應、斷開TCP鏈接,文章最後還捎帶講了與HTTP相關知識。文章較長,建議收藏或轉發後閱讀! html
今天咱們可以在網絡中暢遊,都得益於一位計算機科學家蒂姆·伯納斯·李的構想。1991年8月6日,蒂姆·伯納斯·李在位於歐洲粒子物理研究所(CERN)的NeXT計算機上,正式公開運行世界上第一個Web網站(info.cern.ch ),創建起基本的互聯網基礎概念和技術體系,由此開啓了網絡信息時代的序幕。 面試
伯納斯·李的提案包含了網絡的基本概念並逐步創建了全部必要的工具:HTTP 協議一共有五大特色:瀏覽器
咱們常常聽到一句話就是:HTTP是一個基於TCP/IP協議簇來傳遞數據。安全
如何理解上面那句話?咱們來看看TCP/IP四層模型就明白了。 服務器
從上圖咱們能夠清晰的看到HTTP使用的傳輸層協議爲 TCP協議,而網絡層使用的是 IP協議(固然還使用了不少其餘協議),因此說 HTTP是一個基於TCP/IP協議簇來傳遞數據。一樣咱們能夠看到ping走的ICMP協議,這也就是爲何有時候咱們開vps能夠上網,可是ping google卻ping不通的緣由,由於走的是不一樣的協議。網絡
那TCP/IP協議簇大體是如何工做的,咱們再來看看下圖: tcp
咱們能夠看到在數據發送端是一層一層封裝數據,數據接收端一層一層拆封,最後應用層得到數據。咱們知道了TCP/IP協議簇大體的工做原理以後,咱們來看看HTTP是如何創建鏈接的。編輯器
前面我們講過HTTP是一個基於TCP/IP協議簇來傳遞數據,因此這HTTP創建鏈接也就是創建TCP鏈接,TCP如何創建鏈接,一塊兒來看看TCP包信息結構吧。 ide
TCP報文包=TCP頭信息+TCP數據體,而在TCP頭信息中包含了6種控制位(上圖紅色框中),這六種標誌位就表明着TCP鏈接的狀態:瞭解了TCP包頭信息以後,咱們就能夠正式看看TCP創建鏈接的三次握手了。
三次握手講解:面試官:爲何http創建鏈接須要三次握手,不是兩次或四次 答:三次是最少的安全次數,兩次不安全,四次浪費資源
客戶端與服務器鏈接上了以後,客戶端就能夠開始向服務器請求資源,就能夠開始發送HTTP請求了。
咱們以前說過TCP報文包=TCP頭信息+TCP數據體,TCP頭信息咱們已經講了,如今來說TCP數據體,也就是咱們的HTTP請求報文。
來看看實際的HTTP請求例子:
請求頭參數很是多,豬哥就不一一說明,只說明兩個低級的反扒參數:
服務器在收到客戶端請求處理完須要響應並返回給客戶端,而HTTP響應報文結構與請求結構體一致。
響應報文中咱們重點關注下:服務器的響應狀態碼,面試也很容易問到,下面豬哥只列出分類,詳細狀態碼自行上網查找了解。
在服務器響應完畢後,一次會話就結束了,請問這時候鏈接會斷開嗎?
是否斷開咱們須要區分HTTP版本:
注意:長鏈接是指一次TCP鏈接容許屢次HTTP會話,HTTP永遠都是一次請求/響應,會話結束,HTTP自己不存在長鏈接之說。
早在1999年HTTP1.1就推廣普及,因此如今瀏覽器在請求時請求頭中都會攜帶一個參數:Connection:keep-alive,這表示瀏覽器要求與服務器創建長鏈接,而服務器也能夠設置是否願意創建長鏈接。
對於服務器來講創建長鏈接有優勢也有缺點:
因此是否開啓長鏈接,長鏈接時間都須要根據網站自身來合理設置。
ps:你們不要小看這一個TCP鏈接,在一次客戶端HTTP完整的請求中(DNS尋址、創建TCP鏈接、請求、等待、解析網頁、斷開TCP鏈接)創建TCP鏈接佔用的時間比仍是很大的。
在創建TCP鏈接時是三次握手,而斷開TCP鏈接是四次揮手!
在前面講TCP/IP協議時咱們說過標誌位: FIN表示通知對方本端要關閉鏈接了,**那斷開鏈接爲什麼須要四次揮手呢?**這裏給你們的課後做業,能夠在留言中給出你的理解,看看是否正確。面試官:爲什麼創建鏈接須要三次握手而關閉鏈接卻須要四次揮手。給你們的課後做業,在留言中給出你的看法!
由於http響應慢、請求頭體積大等缺點,因此在微服務時代,你們都使用rpc來調用服務,rpc相關概念感興趣同窗自行網上學習。
http還有兩個很大的缺點就是明文且不能保證完整性,因此目前會漸漸被HTTPS代替,HTTPS知識豬哥下期將會爲你們講解。