更新時間:2021-05-04 來源:黑馬程序員 瀏覽量:
在網(wǎng)絡(luò)傳輸中HTTP協(xié)議非常重要,該協(xié)議規(guī)定了客戶端和服務(wù)器端請求和應(yīng)答的標(biāo)準(zhǔn)HTTP協(xié)議能保證計算機(jī)正確快速地傳輸超文本文檔,并確定了傳輸文檔中的哪部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。
根據(jù)HTTP協(xié)議的規(guī)定,客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息,由請求行,求頭部、空行以及請求數(shù)據(jù)四部分組成。如下所示為請求消息的一般格式。
下面結(jié)合一個典型的HTTP請求示例,詳細(xì)介紹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行為請求行,包含了請求方法、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:完善的請求/響應(yīng)模型,并將協(xié)議補(bǔ)充完整,定義了CET、POST和HEAD3種請求方法。
(3)HTTP 1.1:在1.0基礎(chǔ)上進(jìn)行更新,新增了5種請求方法: OPTIONS、 PUT、 DELETE、TRACE和CONNECT方法。
(4)HTTP 2.0(未普及):請求/響應(yīng)首部的定義基本沒有改變,只是所有首部鍵必須全部小寫,而且請求行要獨立為:method、:scheme、:host、 :path 等鍵值對。
不同請求方法的含義如下所示。
GET
請求指定的頁面信息,并返回實體主體
POST
向指定資源提交數(shù)據(jù)進(jìn)行處理請求(如提交表單或者上傳文件),數(shù)據(jù)被包含在請求體中。POST 請求可能會導(dǎo)致新的資源的建立和已有資源的修改。
HEAD
類似于GET請求,只不過返回的響應(yīng)中沒有具體內(nèi)容,用于獲取報頭
PUT
這種請求方式下,從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔內(nèi)容
DELETE
請求服務(wù)器刪除指定的頁面
CONNECT
HTTP 1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器
OPTIONS
允許客戶端查看服務(wù)器的性能
TRACE
回顯服務(wù)器收到的請求,主要用于測試或診斷
其中,最常用的請求方法是GET和POST,兩者的區(qū)別在于:
(1)GET是從服務(wù)器上獲取指定頁面信息,POST是向服務(wù)器提交數(shù)據(jù)并獲取頁面信息。
(2)GET請求參數(shù)都顯示在URL上,服務(wù)器根據(jù)該請求所包含URL中的參數(shù)來產(chǎn)生響應(yīng)內(nèi)容。由于請求參數(shù)都暴露在外,所以安全性不高。
(3)POST請求參數(shù)在請求體當(dāng)中,消息長度沒有限制而且采取隱式發(fā)送,通常用HTTP服務(wù)器提交量比較大的數(shù)據(jù)(如請求中包含許多參數(shù)或者文件上傳操作等)。POST請求的參數(shù)不在URL中,而在請求體中,在安全性方面,比GET請求更高。
請求行下是若干個請求報頭,下面介紹常 用的請求報頭及其含義。
(1)Host(主機(jī)和端口號) :指定被請求資源的Internet主機(jī)和端口號,對應(yīng)網(wǎng)址URL的Web名稱和端口號,通常屬于URL的Host部分。
(2)Connection(連接類型):表示客戶端與服務(wù)器的連接類型。通常情況下,連接類型的對話流程如下:
①Client發(fā)起一個包含Connection:keep-alive的請求(HTTP 1.1使用keep-alive為默認(rèn)值)
②Server收到請求后:
◆如果Server支持keep-alive, 回復(fù)一個包含Conection:keep-alive的響應(yīng),不關(guān)閉連接。
◆如果Server不支持keep-alive,回復(fù)一個包含Connection:close的響應(yīng),關(guān)閉連接。
③如果Client收到包含Connection:keep-alive的響應(yīng),則向同個連接發(fā)送下一個請求,直到一方主動關(guān)閉連接。
注意: Connection:keep-alive 在很多情況下能夠重用連接,減少資源消耗,縮短響應(yīng)時間。例如,當(dāng)瀏覽器需要多個文件時(如一個HTML文件和多個Image文件),不需要每次都去請求建立連接
(3)Upgrade-Insecure-Requests(升級為HTTPS請求):表示升級不安全的請求,會在加載HTTP資源時自動替換成HTTPS請求,讓瀏覽器不再顯示HTTPS頁面中的HTTP請求警報。
HTTPS是以安全為目標(biāo)的HTTP通道,所以在HTTPS承載的頁面上不允許出現(xiàn)HTTP請求,一且出現(xiàn)就會提示或報錯。
(4)User-Agent(瀏覽器名稱):標(biāo)識客戶端身份的名稱,通常頁面會根據(jù)不同的User-Agent信息自動做出適配,甚至返回不同的響應(yīng)內(nèi)容。
(5)Accept(傳輸文件類型):指瀏覽器或其他客戶端可以接受的MIME(Multipurpose Internet Mail Extensions,多用途因特網(wǎng)郵件擴(kuò)展)文件類型,服務(wù)器可以根據(jù)它判斷并返回適當(dāng)?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:表示權(quán)重系數(shù),范圍是0=<q<= 1。q值越大,請求越傾向于獲得其“;”之前的類型表示的內(nèi)容。若沒有指定q值,則默認(rèn)為1,按從左到右排序;若被賦值為0,則表示瀏覽器不接受此內(nèi)容類型。
◆text: 用于標(biāo)準(zhǔn)化地表示文本信息,文本信息可以是多種字符集和多種格式。
◆Aplication:用于傳輸應(yīng)用程序數(shù)據(jù)或者二進(jìn)制數(shù)據(jù)。
(6)Referer(頁面跳轉(zhuǎn)來源):表明產(chǎn)生請求的網(wǎng)頁來自于哪個URL。用戶是從該Referer頁面訪問到當(dāng)前請求的頁面。這個屬性可以用來跟蹤Web請求來自哪個頁面,是從什么網(wǎng)站來的等。
有時下載某網(wǎng)站的圖片時,需要對應(yīng)Referer,否則無法下載圖片,那是因為做了防盜鏈。原理就是根據(jù)Referer去判斷URL是否是本網(wǎng)站的地址,如果不是,則拒絕:如果是,就可以下載。
(7)Accept-Encoding(文件編解碼格式):指出瀏覽器可以接受的編碼方式。編碼方式不同于文件格式,其作用是壓縮文件并加速文件傳遞速度。瀏覽器在接收到Web響應(yīng)之后先解碼,然后再檢查文件格式,許多情形下可以減少大量的下載時間。例如:
Accept-Encoding:gzip;q=1.0, identity; q=0.5, *;q=0
如果有多個Enoding同時匹配,按照q值順序排列,本例中按順序支持gip、identity壓縮編碼,支持gzip的瀏覽器會返回經(jīng)過gzip編碼的HTML頁面。
如果請求消息中沒有設(shè)置這個報頭,通常服務(wù)器假定客戶端不支持壓縮,直接返回文本。
(8)Accept-Language(語言種類):指出瀏覽器可以接受的語言種類,如en或en-us指英語,zh或zh--cn指中文,當(dāng)服務(wù)器能夠提供一種以上的語言版本時要用到。
如果目標(biāo)網(wǎng)站支持多個語種,可以使用這個信息來決定返回什么語言的網(wǎng)頁。
(9)Accepl-Charset (字符編碼) :指出瀏覽器可以接受的字符編碼。例如:
Accept-Charset:iso-8859-1,gb2312,utf-8
常用的字符編碼包括:
◆iso-8859-1:通常稱為Latin-1。Latin-1包括書寫所有西方歐洲語言不可缺少的附加字符,英文瀏覽器的默認(rèn)值是iso-8859-1。
◆gb2312:標(biāo)準(zhǔn)簡體中文字符集。
◆utf-8: Unicode的一種變長字符編碼, 可以解決多種語言文本顯示問題,從而實現(xiàn)應(yīng)用國際化和本地化。
如果在HTTP請求消息中沒有設(shè)置這個域,默認(rèn)情況下,客戶端可以接受任何字符集,返回的是網(wǎng)頁charset指定的編碼。
(10)Cookie(Cookie):瀏覽器用這個屬性向服務(wù)器發(fā)送Cookie。Cookie 是在瀏覽器中寄存的小型數(shù)據(jù)體,它可以記載和服務(wù)器相關(guān)的用戶信息,也可以用來實現(xiàn)模擬登錄。
(11)Conten-Type(POST數(shù)據(jù)類型):指定POST請求中用來表示的內(nèi)容類型。例如:
Content-Type=Text/XML; charset=gb2312:
上述示例指明了該請求的消息體中包含的是純文本的XML類型的數(shù)據(jù),字符編碼采用gb2312。
猜你喜歡: