首頁技術文章正文

HTTP請求格式:請求行、請求頭詳細介紹【爬蟲工程師必會】

更新時間:2021-05-04 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif

在網(wǎng)絡傳輸中HTTP協(xié)議非常重要,該協(xié)議規(guī)定了客戶端和服務器端請求和應答的標準HTTP協(xié)議能保證計算機正確快速地傳輸超文本文檔,并確定了傳輸文檔中的哪部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。

根據(jù)HTTP協(xié)議的規(guī)定,客戶端發(fā)送一個HTTP請求到服務器的請求消息,由請求行,求頭部、空行以及請求數(shù)據(jù)四部分組成。如下所示為請求消息的一般格式。

 

1620122716875_01求情信息的一般格式.png

下面結合一個典型的HTTP請求示例,詳細介紹HTTP請求信息的各個組成部分。示例內(nèi)容如下:

GET https://www.baidu.com/content-search.xml HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: no-cors
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=12D4BD8584CA4E016E061A2A996EF369; PSTM=1620090350; BAIDUID=12D4BD8584CA4E01C03BA560AACCF2CE:FG=1; BD_UPN=12314753; H_PS_PSSID=33984_31660_33848_33759_33676_33607_33987_26350; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; __yjs_duid=1_1a965d65ab35181f7b7b98cce26990951620094330751; ab_sr=1.0.0_YjM2Y2YwOWI1MDU4ZDEzODMyZDZkNDBlODllOWEzZTdiMjk4YzgzYmUyM2ZjODA4MWM0MDExZTdiMDZlOTQwOWZhMWI0NGQ3NzNhODI2NTYzMWM1NzQ2ZDBmYjhkM2Q1; ispeed_lsm=0; H_PS_645EC=b177fVn0%2Brl2KczNrCfwRaWGfk3JZzrl7ScjgHBcxVvOkubEWrAPvQ6AXa4; BD_HOME=1; __guid=136081015.3970791550720005000.1620116535606.869; monitor_count=2; BA_HECTOR=8121a4848h8l0k0l6o1g9213e0r

 

1.請求行

上例中第1行為請求行,包含了請求方法、URL地址和協(xié)議版本,代碼如下:

GET https://www.baidu.com/content-search.xml HTTP/1.1

其中,GET是請求方法,https://www.baidu com/是URL地址,HTTP/1.1指定了協(xié)議版本。

不同的HTTP版本能夠使用的請求方法也不同,具體介紹如下:

(1)HTTP 0.9:只有基本的文本GET功能。

(2)HTTP 1.0:完善的請求/響應模型,并將協(xié)議補充完整,定義了CET、POST和HEAD3種請求方法。

(3)HTTP 1.1:在1.0基礎上進行更新,新增了5種請求方法: OPTIONS、 PUT、 DELETE、TRACE和CONNECT方法。

(4)HTTP 2.0(未普及):請求/響應首部的定義基本沒有改變,只是所有首部鍵必須全部小寫,而且請求行要獨立為:method、:scheme、:host、 :path 等鍵值對。

不同請求方法的含義如下所示。


GET

請求指定的頁面信息,并返回實體主體

POST

向指定資源提交數(shù)據(jù)進行處理請求(如提交表單或者上傳文件),數(shù)據(jù)被包含在請求體中。POST 請求可能會導致新的資源的建立和已有資源的修改。

HEAD

類似于GET請求,只不過返回的響應中沒有具體內(nèi)容,用于獲取報頭

PUT

這種請求方式下,從客戶端向服務器傳送的數(shù)據(jù)取代指定的文檔內(nèi)容

DELETE

請求服務器刪除指定的頁面

CONNECT

HTTP 1.1協(xié)議中預留給能夠?qū)⑦B接改為管道方式的代理服務器

OPTIONS

允許客戶端查看服務器的性能

TRACE

回顯服務器收到的請求,主要用于測試或診斷
 

其中,最常用的請求方法是GET和POST,兩者的區(qū)別在于:

(1)GET是從服務器上獲取指定頁面信息,POST是向服務器提交數(shù)據(jù)并獲取頁面信息。

(2)GET請求參數(shù)都顯示在URL上,服務器根據(jù)該請求所包含URL中的參數(shù)來產(chǎn)生響應內(nèi)容。由于請求參數(shù)都暴露在外,所以安全性不高。

(3)POST請求參數(shù)在請求體當中,消息長度沒有限制而且采取隱式發(fā)送,通常用HTTP服務器提交量比較大的數(shù)據(jù)(如請求中包含許多參數(shù)或者文件上傳操作等)。POST請求的參數(shù)不在URL中,而在請求體中,在安全性方面,比GET請求更高。

 

1620121559661_http請求.png

2.請求報頭

請求行下是若干個請求報頭,下面介紹常 用的請求報頭及其含義。

(1)Host(主機和端口號) :指定被請求資源的Internet主機和端口號,對應網(wǎng)址URL的Web名稱和端口號,通常屬于URL的Host部分。

(2)Connection(連接類型):表示客戶端與服務器的連接類型。通常情況下,連接類型的對話流程如下:

①Client發(fā)起一個包含Connection:keep-alive的請求(HTTP 1.1使用keep-alive為默認值)

②Server收到請求后:

◆如果Server支持keep-alive, 回復一個包含Conection:keep-alive的響應,不關閉連接。

◆如果Server不支持keep-alive,回復一個包含Connection:close的響應,關閉連接。

③如果Client收到包含Connection:keep-alive的響應,則向同個連接發(fā)送下一個請求,直到一方主動關閉連接。

注意: Connection:keep-alive 在很多情況下能夠重用連接,減少資源消耗,縮短響應時間。例如,當瀏覽器需要多個文件時(如一個HTML文件和多個Image文件),不需要每次都去請求建立連接

(3)Upgrade-Insecure-Requests(升級為HTTPS請求):表示升級不安全的請求,會在加載HTTP資源時自動替換成HTTPS請求,讓瀏覽器不再顯示HTTPS頁面中的HTTP請求警報。

HTTPS是以安全為目標的HTTP通道,所以在HTTPS承載的頁面上不允許出現(xiàn)HTTP請求,一且出現(xiàn)就會提示或報錯。

(4)User-Agent(瀏覽器名稱):標識客戶端身份的名稱,通常頁面會根據(jù)不同的User-Agent信息自動做出適配,甚至返回不同的響應內(nèi)容。

(5)Accept(傳輸文件類型):指瀏覽器或其他客戶端可以接受的MIME(Multipurpose Internet Mail Extensions,多用途因特網(wǎng)郵件擴展)文件類型,服務器可以根據(jù)它判斷并返回適當?shù)奈募袷健?

Accept報頭的示例如下:

Accept: */*              //1表示什么都可以接收
Accept: image/gif        //表明客戶端希望接受GIF圖像格式的資源
Accept: text/html        //表明客戶端希望接受html文本
Accept: text/html,application/xhtml+xml;q=0.9,image/*;q=0.8 //表示瀏覽器支持的MIME類型分別是html文本、xhtml和xml文檔、所有的圖像格式資深

其中:

◆q:表示權重系數(shù),范圍是0=<q<= 1。q值越大,請求越傾向于獲得其“;”之前的類型表示的內(nèi)容。若沒有指定q值,則默認為1,按從左到右排序;若被賦值為0,則表示瀏覽器不接受此內(nèi)容類型。

◆text: 用于標準化地表示文本信息,文本信息可以是多種字符集和多種格式。

◆Aplication:用于傳輸應用程序數(shù)據(jù)或者二進制數(shù)據(jù)。

(6)Referer(頁面跳轉(zhuǎn)來源):表明產(chǎn)生請求的網(wǎng)頁來自于哪個URL。用戶是從該Referer頁面訪問到當前請求的頁面。這個屬性可以用來跟蹤Web請求來自哪個頁面,是從什么網(wǎng)站來的等。

有時下載某網(wǎng)站的圖片時,需要對應Referer,否則無法下載圖片,那是因為做了防盜鏈。原理就是根據(jù)Referer去判斷URL是否是本網(wǎng)站的地址,如果不是,則拒絕:如果是,就可以下載。

(7)Accept-Encoding(文件編解碼格式):指出瀏覽器可以接受的編碼方式。編碼方式不同于文件格式,其作用是壓縮文件并加速文件傳遞速度。瀏覽器在接收到Web響應之后先解碼,然后再檢查文件格式,許多情形下可以減少大量的下載時間。例如:

Accept-Encoding:gzip;q=1.0, identity; q=0.5, *;q=0

如果有多個Enoding同時匹配,按照q值順序排列,本例中按順序支持gip、identity壓縮編碼,支持gzip的瀏覽器會返回經(jīng)過gzip編碼的HTML頁面。

如果請求消息中沒有設置這個報頭,通常服務器假定客戶端不支持壓縮,直接返回文本。

(8)Accept-Language(語言種類):指出瀏覽器可以接受的語言種類,如en或en-us指英語,zh或zh--cn指中文,當服務器能夠提供一種以上的語言版本時要用到。

如果目標網(wǎng)站支持多個語種,可以使用這個信息來決定返回什么語言的網(wǎng)頁。

(9)Accepl-Charset (字符編碼) :指出瀏覽器可以接受的字符編碼。例如:

Accept-Charset:iso-8859-1,gb2312,utf-8


常用的字符編碼包括:

◆iso-8859-1:通常稱為Latin-1。Latin-1包括書寫所有西方歐洲語言不可缺少的附加字符,英文瀏覽器的默認值是iso-8859-1。

◆gb2312:標準簡體中文字符集。

◆utf-8: Unicode的一種變長字符編碼, 可以解決多種語言文本顯示問題,從而實現(xiàn)應用國際化和本地化。

如果在HTTP請求消息中沒有設置這個域,默認情況下,客戶端可以接受任何字符集,返回的是網(wǎng)頁charset指定的編碼。

(10)Cookie(Cookie):瀏覽器用這個屬性向服務器發(fā)送Cookie。Cookie 是在瀏覽器中寄存的小型數(shù)據(jù)體,它可以記載和服務器相關的用戶信息,也可以用來實現(xiàn)模擬登錄。

(11)Conten-Type(POST數(shù)據(jù)類型):指定POST請求中用來表示的內(nèi)容類型。例如:

Content-Type=Text/XML; charset=gb2312:

上述示例指明了該請求的消息體中包含的是純文本的XML類型的數(shù)據(jù),字符編碼采用gb2312。



猜你喜歡:

三種分布式爬蟲策略的優(yōu)缺點

多線程爬蟲是什么?多線程爬蟲流程分析

Python爬蟲可以做什么?

網(wǎng)絡爬蟲獲取數(shù)據(jù)的5種方式

黑馬程序員Python+大數(shù)據(jù)培訓課程

分享到:
在線咨詢 我要報名
和我們在線交談!