??????今天給大家分享的是 HTTP 請(qǐng)求部分的基礎(chǔ)知識(shí)。
清風(fēng)的CSDN博客
?????????希望我的文章能對(duì)你有所幫助,有不足的地方還請(qǐng)各位看官多多指教,大家一起學(xué)習(xí)交流!
??????動(dòng)動(dòng)你們發(fā)財(cái)?shù)男∈?,點(diǎn)點(diǎn)關(guān)注點(diǎn)點(diǎn)贊!在此謝過(guò)啦!哈哈哈!??????
目錄
?一、HTTP請(qǐng)求格式
二、 認(rèn)識(shí) URL?
2.1 URL基本格式
三、認(rèn)識(shí)方法 method
3.1 GET 方法?
3.2 POST 方法?
3.3 其他方法?
四、認(rèn)識(shí)請(qǐng)求報(bào)頭(Header)?
?五、認(rèn)識(shí)請(qǐng)求正文
?一、HTTP請(qǐng)求格式
為什么 HTTP 請(qǐng)求中要存在空行呢?
- 因?yàn)?HTTP 協(xié)議并沒(méi)有規(guī)定報(bào)頭部分的鍵值對(duì)有多少個(gè),空行就相當(dāng)于是 "報(bào)頭的結(jié)束標(biāo)記", 或者是 "報(bào)頭和正文之間的分隔符"。
- HTTP 在傳輸層依賴 TCP 協(xié)議, TCP 是面向字節(jié)流的,如果沒(méi)有這個(gè)空行, 就會(huì)出現(xiàn) "粘包問(wèn)題"。
二、 認(rèn)識(shí) URL?
2.1 URL基本格式
https://v.bitedu.vip/personInf/student?userId=10000&classId=100
- https : 協(xié)議方案名. 常見(jiàn)的有 http 和 https, 也有其他的類型。(例如訪問(wèn) mysql 時(shí)用的 jdbc:mysql )
- user:pass : 登陸信息. 現(xiàn)在的網(wǎng)站進(jìn)行身份認(rèn)證一般不再通過(guò) URL 進(jìn)行了,一般都會(huì)省略
- v.bitedu.vip : 服務(wù)器地址,?此處是一個(gè) "域名", 域名會(huì)通過(guò) DNS 系統(tǒng)解析成一個(gè)具體的 IP 地址。
- 端口號(hào): 上面的 URL 中端口號(hào)被省略了,當(dāng)端口號(hào)省略的時(shí)候, 瀏覽器會(huì)根據(jù)協(xié)議類型自動(dòng)決定使用哪個(gè)端口。例如 http 協(xié)議默認(rèn)使用 80 端口, https 協(xié)議默認(rèn)使用 443 端口.
- /personInf/student : 帶層次的文件路徑。
- userId=10000&classId=100 : 查詢字符串(query string),本質(zhì)是一個(gè)鍵值對(duì)結(jié)構(gòu),鍵值對(duì)之間使用 & 分隔,鍵和值之間使用 = 分隔。
- 片段標(biāo)識(shí): 此 URL 中省略了片段標(biāo)識(shí). 片段標(biāo)識(shí)主要用于頁(yè)面內(nèi)跳轉(zhuǎn)。
關(guān)于 query string?
query string 中的內(nèi)容是鍵值對(duì)結(jié)構(gòu),其中的 key 和 value 的取值和個(gè)數(shù), 完全都是程序猿自己約定的,我們可以通過(guò)這樣的方式來(lái)自定制傳輸我們需要的信息給服務(wù)器。
- 協(xié)議名: 可以省略, 省略后默認(rèn)為 http://
- ip 地址 / 域名: 在 HTML 中可以省略(比如 img, link, script, a 標(biāo)簽的 src 或者 href 屬性),省略后表示服務(wù)器的 ip / 域名與當(dāng)前 HTML 所屬的 ip / 域名一致。
- 端口號(hào): 可以省略,省略后如果是 http 協(xié)議, 端口號(hào)自動(dòng)設(shè)為 80; 如果是 https 協(xié)議, 端口號(hào)自動(dòng)設(shè)為 443。
- 帶層次的文件路徑: 可以省略. 省略后相當(dāng)于 / ,有些服務(wù)器會(huì)在發(fā)現(xiàn) / 路徑的時(shí)候自動(dòng)訪問(wèn)/index.html
- 查詢字符串: 可以省略
- 片段標(biāo)識(shí): 可以省略
?關(guān)于 URL encode
- 像 / ? : 等這樣的字符, 已經(jīng)被url當(dāng)做特殊意義理解了,因此這些字符不能隨意出現(xiàn)。比如, 某個(gè)參數(shù)中需要帶有這些特殊字符, 就必須先對(duì)特殊字符進(jìn)行轉(zhuǎn)義。
- 轉(zhuǎn)義的規(guī)則如下: 將需要轉(zhuǎn)碼的字符轉(zhuǎn)為16進(jìn)制,然后從右到左,取4位(不足4位直接處理),每2位做一位,前面加上%,編碼成%XY格式
例如:
?"+" 被轉(zhuǎn)義成了 "%2B" 。
三、認(rèn)識(shí)方法 method
3.1 GET 方法?

GET 請(qǐng)求的特點(diǎn)?
- 首行的第一部分為 GET
- URL 的 query string 可以為空, 也可以不為空
- header 部分有若干個(gè)鍵值對(duì)結(jié)構(gòu)
- body 部分為空
3.2 POST 方法?

POST 請(qǐng)求的特點(diǎn) ?
- 首行的第一部分為 POST
- URL 的 query string 一般為空 (也可以不為空)
- header 部分有若干個(gè)鍵值對(duì)結(jié)構(gòu)
- body 部分一般不為空,body 內(nèi)的數(shù)據(jù)格式通過(guò) header 中的 Content-Type 指定,body 的長(zhǎng)度由header 中的 Content-Length 指定
GET 和 POST 的區(qū)別?
- 語(yǔ)義不同: GET 一般用于獲取數(shù)據(jù), POST 一般用于提交數(shù)據(jù)
- GET 的 body 一般為空, 需要傳遞的數(shù)據(jù)通過(guò) query string 傳遞, POST 的 query string 一般為空, 需要傳遞的數(shù)據(jù)通過(guò) body 傳遞
- GET 請(qǐng)求一般是冪等的, POST 請(qǐng)求一般是不冪等的(如果多次請(qǐng)求得到的結(jié)果一樣, 就視為請(qǐng)求是冪等的)
- GET 可以被緩存, POST 不能被緩存
注意事項(xiàng):
- ?關(guān)于語(yǔ)義: GET 完全可以用于提交數(shù)據(jù), POST 也完全可以用于獲取數(shù)據(jù)
- 關(guān)于冪等性: 標(biāo)準(zhǔn)建議 GET 實(shí)現(xiàn)為冪等的,實(shí)際開(kāi)發(fā)中 GET 也不必完全遵守這個(gè)規(guī)則
- 關(guān)于安全性: 有些資料上說(shuō) "POST 比 GET 請(qǐng)安全",?這樣的說(shuō)法是不科學(xué)的,是否安全取決于前端在傳輸密碼等敏感信息時(shí)是否進(jìn)行加密, 和 GET POST 無(wú)關(guān)
- 關(guān)于傳輸數(shù)據(jù)量: 有的資料上說(shuō) "GET 傳輸?shù)臄?shù)據(jù)量小, POST 傳輸數(shù)據(jù)量大",這個(gè)也是不科學(xué)的, 標(biāo)準(zhǔn)沒(méi)有規(guī)定 GET 的 URL 的長(zhǎng)度, 也沒(méi)有規(guī)定 POST 的 body 的長(zhǎng)度,傳輸數(shù)據(jù)量多少, 完全取決于不同瀏覽器和不同服務(wù)器之間的實(shí)現(xiàn)區(qū)別
- 關(guān)于傳輸數(shù)據(jù)類型: 有的資料上說(shuō) "GET 只能傳輸文本數(shù)據(jù), POST 可以傳輸二進(jìn)制數(shù)據(jù)",這個(gè)也是不科學(xué)的,GET 的 query string 雖然無(wú)法直接傳輸二進(jìn)制數(shù)據(jù), 但是可以針對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行 url encode
3.3 其他方法?
- PUT 與 POST 相似,只是具有冪等特性,一般用于更新
- DELETE 刪除服務(wù)器指定資源
- OPTIONS 返回服務(wù)器所支持的請(qǐng)求方法
- HEAD 類似于GET,只不過(guò)響應(yīng)體不返回,只返回響應(yīng)頭
- TRACE 回顯服務(wù)器端收到的請(qǐng)求,測(cè)試的時(shí)候會(huì)用到這個(gè)
- CONNECT 預(yù)留,暫無(wú)使用
四、認(rèn)識(shí)請(qǐng)求報(bào)頭(Header)?
- Host :表示服務(wù)器主機(jī)的地址和端口
- Content-Length :表示 body 中的數(shù)據(jù)長(zhǎng)度
- Content-Type:表示請(qǐng)求的 body 中的數(shù)據(jù)格式
- User-Agent (簡(jiǎn)稱 UA)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/91.0.4472.77 Safari/537.36
- Windows NT 10.0; Win64; x64 表示操作系統(tǒng)信息。
- AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 表示瀏覽器 信息。?
- Referer
https://v.bitedu.vip/login
- Cookie
? ? ? 比如,有些時(shí)候,登錄了一個(gè)網(wǎng)站之后,后續(xù)再訪問(wèn)這個(gè)網(wǎng)站的其他頁(yè)面,都不必重新登錄。為了實(shí)現(xiàn)身份識(shí)別的效果,不僅需要cookie來(lái)支持,也需要一個(gè)session機(jī)制來(lái)支持。首次訪問(wèn)網(wǎng)站并登錄成功,網(wǎng)站會(huì)設(shè)定一個(gè)身份標(biāo)識(shí)sessioId,身份標(biāo)識(shí)通過(guò)服務(wù)器返回給瀏覽器,并保存再cookie中,接下來(lái)要訪問(wèn)該網(wǎng)站的其他頁(yè)面時(shí),cookie會(huì)存在于請(qǐng)求報(bào)頭中,向服務(wù)器發(fā)出請(qǐng)求,這樣就起到了身份識(shí)別效果。
?五、認(rèn)識(shí)請(qǐng)求正文
那我就抓取一下當(dāng)前寫博客的這個(gè)頁(yè)面:
空行下面的便是正文部分:?
??????好啦,今天的分享就到這里!
??????希望各位看官讀完文章后,能夠有所提升!
??????創(chuàng)作不易,還希望各位大佬支持一下!
??????點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動(dòng)力!
???收藏,你的青睞是我努力的方向!
??????評(píng)論:你的意見(jiàn)是我進(jìn)步的財(cái)富!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-798064.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-798064.html
到了這里,關(guān)于HTTP協(xié)議請(qǐng)求詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!