HTTP請(qǐng)求

HTTP請(qǐng)求過(guò)程

我們?cè)跒g覽器輸入百度首頁(yè)的地址:https://www.baidu.com,輸入之后瀏覽器會(huì)給我們打開(kāi)百度首頁(yè)。實(shí)際上這個(gè)過(guò)程是瀏覽器向網(wǎng)站所在的服務(wù)器發(fā)送了一個(gè)Request請(qǐng)求,網(wǎng)站服務(wù)器接收到這個(gè)Request之后進(jìn)行處理和解析,然后返回對(duì)應(yīng)的一個(gè)Response響應(yīng),然后傳回給瀏覽器,Response里面就包含了頁(yè)面的源代碼等內(nèi)容,瀏覽器再對(duì)其進(jìn)行解析便將網(wǎng)頁(yè)呈現(xiàn)了出來(lái)。

image.jpeg

在網(wǎng)頁(yè)中按F12可查看詳細(xì)的請(qǐng)求和響應(yīng)內(nèi)容

Request(請(qǐng)求)

由客戶端向服務(wù)端發(fā)出。可以將Request劃分為四部分內(nèi)容:

  • Request Method:請(qǐng)求方式
  • Request URL:請(qǐng)求鏈接
  • Request Headers:請(qǐng)求頭
  • Request Body:請(qǐng)求體

Request Method

請(qǐng)求方式常見(jiàn)的有兩種類型,GET和POST。

  • GET用于信息獲取,而且應(yīng)該是安全的和冪等的(冪等的意思就是一個(gè)操作不會(huì)修改狀態(tài)信息,并且每次操作的時(shí)候都返回同樣的結(jié)果。)從發(fā)送請(qǐng)求的角度,GET請(qǐng)求相當(dāng)于我們?cè)跀?shù)據(jù)庫(kù)中做了查詢的操作,這樣的操作不影響數(shù)據(jù)庫(kù)本身的數(shù)據(jù)。
  • POST表示可能會(huì)修改服務(wù)器上資源的請(qǐng)求,也相當(dāng)于在數(shù)據(jù)庫(kù)中做了修改的操作,會(huì)影響數(shù)據(jù)庫(kù)本身的數(shù)據(jù)(比如:注冊(cè)了賬戶,發(fā)了帖子,做了評(píng)論,得到了積分等。這種情況下,資源狀態(tài)被改變了)。

案例1——GET請(qǐng)求

在瀏覽器輸入:https://www.baidu.com/s?wd=appium 并回車,這個(gè)其實(shí)就是在百度搜索appium這個(gè)關(guān)鍵詞。URL中包含了請(qǐng)求的參數(shù)信息,這里參數(shù)wd就是要搜尋的關(guān)鍵字。在瀏覽器可以看到Query String Parameters 選項(xiàng)就是請(qǐng)求的參數(shù)。發(fā)起一次GET請(qǐng)求時(shí),參數(shù)會(huì)以u(píng)rl string的形式進(jìn)行傳遞。即?后的字符串則為其請(qǐng)求參數(shù)。并以&作為分隔符。

案例2——POST請(qǐng)求

一般來(lái)說(shuō),網(wǎng)站登錄驗(yàn)證的時(shí)候,需要提交用戶名密碼,這里包含了敏感信息,使用GET方式請(qǐng)求的話密碼就會(huì)暴露在URL里面,造成密碼泄漏,所以這里最好以POST方式發(fā)送。文件的上傳時(shí),由于文件內(nèi)容比較大,也會(huì)選用POST方式。

除了常規(guī)的GET,POST請(qǐng)求,另外還有一些請(qǐng)求方式,如HEAD、PUT、DELETE等,簡(jiǎn)單將其總結(jié)如下:


image.png

Request URL

Request URL就是請(qǐng)求的網(wǎng)址,即統(tǒng)一資源定位符,用URL 可以唯一確定我們想請(qǐng)求的資源。比如:https://www.baidu.com/

Request Headers

請(qǐng)求頭,用來(lái)說(shuō)明服務(wù)器要使用的附加信息,比較重要的信息有Cookie、Referer、User-Agent等,下面將一些常用的頭信息說(shuō)明如下:

  • Accept,請(qǐng)求報(bào)頭域,用于指定客戶端可接受哪些類型的信息。
  • Accept-Language,指定客戶端可接受的語(yǔ)言類型。
  • Accept-Encoding,指定客戶端可接受的內(nèi)容編碼。
  • Host,用于指定請(qǐng)求資源的主機(jī)IP和端口號(hào),其內(nèi)容為請(qǐng)求URL的原始服務(wù)器或網(wǎng)關(guān)的位置。從HTTP1.1版本開(kāi)始,Request必須包含此內(nèi)容。
  • Cookie,也常用復(fù)數(shù)形式Cookies,是網(wǎng)站為了辨別用戶進(jìn)行Session跟蹤而儲(chǔ)存在用戶本地的數(shù)據(jù)。Cookies的主要功能就是維持當(dāng)前訪問(wèn)會(huì)話。
  • Referer,此內(nèi)容用來(lái)標(biāo)識(shí)這個(gè)請(qǐng)求時(shí)從哪個(gè)頁(yè)面發(fā)過(guò)來(lái)的,服務(wù)器可以拿到這一信息并做相應(yīng)的處理,如做來(lái)源統(tǒng)計(jì)、做防盜鏈處理等。
  • User-Agent,簡(jiǎn)稱UA,它是一個(gè)特殊字符串頭,使得服務(wù)器能夠識(shí)別客戶使用的操作系統(tǒng)及版本、瀏覽器及版本等信息。在做爬蟲(chóng)時(shí)加上此信息可以偽裝為瀏覽器,如果不加很可能會(huì)被識(shí)別出為爬蟲(chóng)。
  • Content-Type,即Internet Media Type,互聯(lián)網(wǎng)媒體類型,也叫做MIME類型,在HTTP協(xié)議消息頭中,使用它來(lái)表示具體請(qǐng)求中的媒體類型信息。例如 application/x-www-form-urlencoded表示表單數(shù)據(jù),text/html代表HTML格式,image/gif代表GIF圖片,application/json代表json類型。

Request Body

請(qǐng)求體,一般用于POST請(qǐng)求中,主要定義向服務(wù)器提交的數(shù)據(jù)類型,而對(duì)于GET請(qǐng)求Request Body則為空。

比如在登錄之前我們填寫(xiě)了用戶名和密碼信息,提交時(shí)就這些內(nèi)容就會(huì)以Form Data的形式提交給服務(wù)器,此時(shí)注意Request Headers中指定了Content-Type為application/x-www-form-urlencoded,只有設(shè)置Content-Type為application/x-www-form-urlencoded才會(huì)以Form Data形式提交,另外我們也可以將Content-Type設(shè)置為application/json提交Json數(shù)據(jù),或者設(shè)置為multipart/form-data來(lái)上傳文件。

常用Content-Type和POST提交數(shù)據(jù)方式的關(guān)系:


image.png

application/x-www-form-urlencoded與multipart/form-data 區(qū)別

  • 在沒(méi)有type=file時(shí)候,用默認(rèn)的application/x-www-form-urlencoded就行。
  • 在有type=file時(shí)候,要用multipart/form-data編碼方式。瀏覽器就會(huì)把表單以控件為單位分割,并且為每個(gè)部分加上Content-Disposition(form-data或file)、Content-Type(默認(rèn)text/plain)、name(控件name)等信息,并加上分割符(boundary)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容