爬蟲基礎-http請求的基礎知識

百度百科上這麼介紹爬蟲:html

網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更常常的稱爲網頁追逐者),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本。web

在開發爬蟲時經常使用的工具:chrome瀏覽器,fiddler工具,postman插件。chrome

有關fiddler知識的地址:http://kb.cnblogs.com/page/130367/瀏覽器

下面普及最基礎的知識:Http請求。(下面知識來源於:http://www.runoob.com/http/http-intro.html緩存

定義服務器

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。TTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。cookie

工做原理網絡

HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。架構

Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。app

Web服務器根據接收到的請求後,向客戶端發送響應信息。HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。

HTTP三點注意事項:

  • HTTP是無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
  • HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據均可以經過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
  • HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。

HTTP 消息結構:

HTTP是基於客戶端/服務端(C/S)的架構模型,經過一個可靠的連接來交換信息,是一個無狀態的請求/響應協議。

一個HTTP"客戶端"是一個應用程序(Web瀏覽器或其餘任何客戶端),經過鏈接到服務器達到向服務器發送一個或多個HTTP的請求的目的。

一個HTTP"服務器"一樣也是一個應用程序(一般是一個Web服務,如Apache Web服務器或IIS服務器等),經過接收客戶端的請求並向客戶端發送HTTP響應數據。

HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。

一旦創建鏈接後,數據消息就經過相似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。

請求消息的結構圖解:

客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的通常格式。

請求發送結構

http請求頭詳解:(參考:https://kb.cnblogs.com/page/92320/

請求頭 請求頭屬性
 Cache-Control

指定請求應遵循的緩存機制,其中緩存指令:no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached。

no-cache:表示請求的消息不能夠緩存

no-store:在請求消息中,表示請求和響應的消息均不能夠緩存,爲了防止重要的消息被無心間泄露

max-age:表示客戶機接收相應消息的最大時間(最大生存期)

max-stale:表示客戶機能夠接受超時的消息,若是指定該值,表示能夠接受超時以後指定值以內的消息

min-fresh:表示客戶機能夠接受當前時間加上指定值的時間以內的消息

only-if-cached:表示客戶機只接受被緩存的內容

 Date 表示消息發送的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界標準時,換算成本地時間,須要知道用戶所在的時區。
 Pragma 反正頁面被緩存,在http1.1版本中,與Cache-Control:no-cache,做用相同,在http1.0中沒有實現Cache-Control.Pragma只有一個用法:Pragma:no-cache
 Host 請求報頭域主要用於指定被請求資源的Internet主機和端口號,它一般從HTTP URL中提取出來的。若是不是默認的80端口,會指定端口。若是不指定host,會報400錯誤
 Referer 爲服務器提供上下文信息,告訴服務器,我這個連接是從什麼地方轉過來的。
 Range

只請求實體的一部分,服務器能夠忽略此請求。

頭500個字節:bytes=0-499。第二個500字節:bytes=500-999。最後500個字節:bytes=-500。500字節之後的範圍:bytes=500-。第一個和最後一個字節:bytes=0-0,-1。同時指定幾個範圍:bytes=500-600,601-999

 User-Agent 表示包含發送請求的用戶信息。若是是瀏覽器發送的話,基本就是瀏覽器的信息
 Accept

表示客戶端可以接受的內容類型,例:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

若是想知道更多的MIME類型,去這個網站:http://www.w3school.com.cn/media/media_mimeref.asp

Accept-Charset 表示瀏覽器能夠接受的字符編碼集。在國內最經常使用的就是utf8,gbk。想了解更多:https://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81
Accept-Encoding 指定瀏覽器能夠支持的web服務器返回內容壓縮編碼類型。經常使用的:compress, gzip
Accept-Language 指定瀏覽器能夠接受的語言。經常使用的 en,zh
Accept-Ranges 能夠請求網頁實體的一個或者多個子範圍字段。例:Accept-Ranges: bytes
Authorization http受權的受權證書
Connection 是否保持持久鏈接。close:表示不保持持久鏈接,keep-alive:保持持久鏈接。(HTTP 1.1默認進行持久鏈接)
Cookie 存儲的一些有關該客戶機的信息,發送http請求時,會把該域名下的全部cookie,一塊兒發送給服務器。
Content-Length 表示請求內容的長度
Content-Type 請求實體的MIME類型。若是想知道更多的MIME類型,去這個網站:http://www.w3school.com.cn/media/media_mimeref.asp
Expect 請求的特定的服務器類型,不是太明白,有懂得能夠幫我解釋一下
From 發出請求的用戶的Email
If-Match 只有請求內容與實體相匹配纔有效
If-Modified-Since  若是請求的部分在指定時間以後被修改則請求成功,未被修改則返回304代碼
If-None-Match 若是內容未改變返回304代碼,參數爲服務器先前發送的Etag,與服務器迴應的Etag比較判斷是否改變
If-Range 若是實體未改變,服務器發送客戶端丟失的部分,不然發送整個實體。參數也爲Etag
If-Unmodified-Since 只在實體在指定時間以後未被修改才請求成功
Max-Forwards 限制信息經過代理和網關傳送的時間
Proxy-Authorization 鏈接到代理的受權證書
TE 客戶端願意接受的傳輸編碼,並通知服務器接受接受尾加頭信息
Upgrade 向服務器指定某種傳輸協議以便服務器進行轉換(若是支持)
Via 通知中間網關或代理服務器地址,通訊協議
Warning 關於消息實體的警告信息

 

http迴應頭詳解:

 

請求頭 請求頭屬性
Cache- Control

指定請求應遵循的緩存機制,其中緩存指令:no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached。

no-cache:表示請求的消息不能夠緩存

no-store:在請求消息中,表示請求和響應的消息均不能夠緩存,爲了防止重要的消息被無心間泄露

max-age:表示客戶機接收相應消息的最大時間(最大生存期)

max-stale:表示客戶機能夠接受超時的消息,若是指定該值,表示能夠接受超時以後指定值以內的消息

min-fresh:表示客戶機能夠接受當前時間加上指定值的時間以內的消息

only-if-cached:表示客戶機只接受被緩存的內容

Date 原始服務器消息發出的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界標準時,換算成本地時間,須要知道用戶所在的時區。
Expires 響應過時的日期和時間
Pragma 不容許頁面被緩存,在http1.1版本中,與Cache-Control:no-cache,做用相同,在http1.0中沒有實現Cache-Control.Pragma只有一個用法:Pragma:no-cache
User-Agent 表示包含發送請求的用戶信息。若是是瀏覽器發送的話,基本就是瀏覽器的信息
Accept-Ranges 能夠請求網頁實體的一個或者多個子範圍字段。例:Accept-Ranges: bytes
Age 從原始服務器到代理緩存造成的估算時間(以秒計,非負)
Allow 對某網絡資源的有效的請求行爲,不容許則返回405,請求行爲:Get,Post,Head等,下面會重點介紹
Content-Encoding web服務器支持的返回內容壓縮編碼類型
Content-Language 響應體的語言
Content-Location 請求資源可替代的備用的另外一地址
Content-MD5  返回資源的MD5校驗值
Content-Range 在整個返回體中本部分的字節位置
Connection 是否保持持久鏈接。close:表示不保持持久鏈接,keep-alive:保持持久鏈接。(HTTP 1.1默認進行持久鏈接)
Cookie 存儲的一些有關該客戶機的信息,發送http請求時,會把該域名下的全部cookie,一塊兒發送給服務器。
Content-Length 響應體內容的長度
Content-Type 返回內容的MIME類型。若是想知道更多的MIME類型,去這個網站:http://www.w3school.com.cn/media/media_mimeref.asp
Via 通知中間網關或代理服務器地址,通訊協議
Warning 關於消息實體的警告信息

ETag 請求變量的實體標籤的當前值
Last-Modified 請求資源的最後修改時間
Location 用來重定向接收方到非請求URL的位置來完成請求或標識新的資源
Proxy-Authenticate 它指出認證方案和可應用到代理的該URL上的參數
refresh 應用於重定向或一個新的資源被創造,在5秒以後重定向(由網景提出,被大部分瀏覽器支持)
Retry-After 若是實體暫時不可取,通知客戶端在指定時間以後再次嘗試
Server web服務器軟件名稱
Set-Cookie 設置Http Cookie
Trailer 指出頭域在分塊傳輸編碼的尾部存在
Transfer-Encoding 文件傳輸編碼
Vary 告訴下游代理是使用緩存響應仍是從原始服務器請求
WWW-Authenticate 代表客戶端請求實體應該使用的受權方案

 

關於請求頭與迴應頭,更多的能夠訪問W3C官網:https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

 

http請求方法:

(轉自:http://www.runoob.com/http/http-methods.html

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

請求方法 描述
GET 請求指定的頁面信息,並返回實體主體。
HEAD 相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。
PUT 從客戶端向服務器傳送的數據取代指定的文檔的內容。
DELETE 請求服務器刪除指定的頁面。
CONNECT HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。
OPTIONS 容許客戶端查看服務器的性能。
TRACE 回顯服務器收到的請求,主要用於測試或診斷。

http狀態碼:

(轉自:http://www.runoob.com/http/http-status-codes.html)

 

分類 分類描述
1** 信息,服務器收到請求,須要請求者繼續執行操做
2** 成功,操做被成功接收並處理
3** 重定向,須要進一步的操做以完成請求
4** 客戶端錯誤,請求包含語法錯誤或沒法完成請求
5** 服務器錯誤,服務器在處理請求的過程當中發生了錯誤
相關文章
相關標籤/搜索