1、HTTP請(qǐng)求報(bào)文的組成結(jié)構(gòu)
HTTP 請(qǐng)求報(bào)文由3部分組成(請(qǐng)求行+請(qǐng)求頭+請(qǐng)求體)
1、請(qǐng)求方法:例如最常用的GET和POST
2、請(qǐng)求的URL地址
3、HTTP協(xié)議名稱和版本號(hào)
4、報(bào)文頭:若干鍵值對(duì)形式的參數(shù), 將客戶端的相關(guān)信息傳遞給服務(wù)端
5、報(bào)文體:發(fā)送給服務(wù)端的數(shù)據(jù)
2、常見(jiàn)HTTP請(qǐng)求頭屬性
Accept: 設(shè)置接受的內(nèi)容類型,指瀏覽器或其他客戶端可以接受的MIME文件類型,服務(wù)器可以根據(jù)它判斷并返回適當(dāng)?shù)奈募袷?Accept: */* //瀏覽器支持接收任何格式
Accept: image/gif //瀏覽器支持接收GIF圖像格式的資源
Accept: text/plain //瀏覽器支持接收普通文本 .txt的資源
Accept: text/html //瀏覽器支持接收html文本資源
例:Accept: text/plain
Accept-Charset :設(shè)置接受的字符編碼
例:Accept-Charset: utf-8
Accept-Encoding:設(shè)置支持的內(nèi)容編碼及內(nèi)容編碼的優(yōu)先級(jí)順序,可一次指定多種內(nèi)容編碼
這里的編碼和字符編碼不同,將正常文件進(jìn)行壓縮就是一種利用文件底層編碼進(jìn)行的再編碼,瀏覽器數(shù)據(jù)發(fā)送的時(shí)候會(huì)將數(shù)據(jù)先根據(jù)請(qǐng)求數(shù)據(jù)中的Accept-Charset進(jìn)行編碼,然后通過(guò)Accept-Encoding中可以接受的壓縮算法進(jìn)行壓縮,這會(huì)有效減小網(wǎng)絡(luò)壓力
gzip:由文件壓縮程序 gzip生成的編碼格式
compress: 由 UNIX 文件壓縮程序 compress 生成的編碼格式
deflate:組合使用 zlib 格式及由 deflate 壓縮算法生成的編碼格式
例: Accept-Encoding: gzip, deflate
Accept-Language: 設(shè)置接受的語(yǔ)言
Accept-Language: en-US
Accept-Language: zh-cn,zh;q=0.5 (瀏覽器支持的語(yǔ)言分別是簡(jiǎn)體中文和中文,優(yōu)先支持簡(jiǎn)體中文,zh-cn表示簡(jiǎn)體中文;zh 表示中文)
q是權(quán)重系數(shù),范圍 0 =< q <= 1,q 值越大,請(qǐng)求越傾向于獲得其“;”之前的類型表示的內(nèi)容,若沒(méi)有指定 q 值,則默認(rèn)為1,若被賦值為0,則用于提醒服務(wù)器哪些是瀏覽器不接受的內(nèi)容類型
Connection :設(shè)置當(dāng)前的事務(wù)完成后,是否會(huì)關(guān)閉網(wǎng)絡(luò)連接
HTTP是無(wú)狀態(tài)協(xié)議,但從HTTP/1.1起,瀏覽器默認(rèn)都開(kāi)啟了Keep-Alive,保持長(zhǎng)連接特性,比如打開(kāi)一個(gè)網(wǎng)頁(yè)后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的TCP連接。
但是Keep-Alive不會(huì)永久保持連接,可以在不同的服務(wù)器軟件中設(shè)定保持時(shí)間
例:Connection: keep-alive 網(wǎng)絡(luò)連接是持久的,不會(huì)關(guān)閉,可在該連接繼續(xù)發(fā)送請(qǐng)求
Content-Length:設(shè)置請(qǐng)求體的字節(jié)長(zhǎng)度,用十進(jìn)制數(shù)字表示的八位字節(jié)的數(shù)字
例:Content-Length: 657
Content-Type:設(shè)置請(qǐng)求體的MIME類型,接口發(fā)送參數(shù)、接收響應(yīng)數(shù)據(jù),都需要雙方約定好使用什么格式的數(shù)據(jù),例如 json、html,只有雙方按照約定好的格式去解析數(shù)據(jù)才能正確的收發(fā)數(shù)據(jù)
Content-Type格式:
Content-Type:type/subtype ;parameter
type:主類型,任意的字符串,如text,如果是*號(hào)代表所有;
subtype:子類型,任意的字符串,如html,如果是*號(hào)代表所有,用“/”與主類型隔開(kāi);
parameter:可選參數(shù),如charset
常見(jiàn)格式:
application/json:JSON格式數(shù)據(jù)
application/x-www-form-urlencoded :post請(qǐng)求中默認(rèn)的格式
multipart/form-data:上傳文件時(shí)需要用到的格式
image/png:png圖片格式
text/plain:純文本格式
text/html:HTML格式
application/xml:XML數(shù)據(jù)格式
示例:
Content-Type: application/json;charset:utf-8;
Content-Type: application/x-www-form-urlencoded;charset:utf-8;
referer: 包含了當(dāng)前請(qǐng)求頁(yè)面的來(lái)源頁(yè)面的地址,即表示當(dāng)前頁(yè)面是通過(guò)此來(lái)源頁(yè)面里的鏈接進(jìn)入的,也稱為HTTP來(lái)源地址(HTTP Referer),可以檢查訪客從哪里來(lái),通過(guò)這個(gè)信息,我們可以知道訪客是怎么來(lái)到當(dāng)前頁(yè)面的,常被用來(lái)對(duì)付偽造的跨網(wǎng)站請(qǐng)求
例:referer:http://therapist.net.cn/
Cookie 設(shè)置服務(wù)器使用Set-Cookie發(fā)送的http cookie
例:cookie:uuid_tt_dd=10_4605394780-1566180485366-784624; Hm_lvt_e5ef47b9f471504959267fd614d579cd=1637564807; __gads=ID=9dd23a2282c17ee5-...