HTTP 是什么
HTTP(Hyper Text Transfer Protocol):
超文本傳輸協(xié)議
,是用層協(xié)議,用于從萬維網(wǎng)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
HTTP 發(fā)展歷程
截至目前,http 經(jīng)歷了原始版本、http1.0、 http1.1、 http2.0 幾個(gè)版本,新版本每次出現(xiàn)都針對(duì)上一個(gè)版本的不足進(jìn)行加強(qiáng)
HTTP 1.0
1.0 版本有個(gè)很大的缺點(diǎn):TCP連接不可復(fù)用,每進(jìn)行一次 HTTP 通信,都需要進(jìn)行一次TCP 連接、HTTP 通信、斷開 TCP 連接流程,如下圖,兩次 HTTP 通信就要進(jìn)行兩個(gè)完整的流程
HTTP 1.1
為了解決1.0版本的TCP連接不可復(fù)用問題,在1.1版本中,提出了 長連接機(jī)制, 在一個(gè) TCP 連接里可以進(jìn)行多次 HTTP 通信,如下圖。
但是1.1 版本和 1.0 都有個(gè)很大的問題:隊(duì)頭阻塞,由于服務(wù)的響應(yīng)是串行的,前一個(gè)請(qǐng)求若未響應(yīng),會(huì)阻塞后一個(gè)響應(yīng)的返回
。
HTTP 2.0
HTTP2.0 對(duì)性能做出了極大的改進(jìn)主要包括:二進(jìn)制分幀、頭部壓縮、服務(wù)端推送、多路復(fù)用
- 二進(jìn)制分幀
在 HTTP1.x 中,數(shù)據(jù)以文本的格式進(jìn)行傳輸,解析起來比較低效。HTTP2.0 在傳輸消息時(shí),首先會(huì)將消息劃分為更小的消息和幀,然后再對(duì)其采取
二進(jìn)制格式
的編碼,確保高效的解析。
- 頭部壓縮
HTTP2.0 中,客戶端和服務(wù)器分別會(huì)維護(hù)一份相同的靜態(tài)字典,這個(gè)字典用來存儲(chǔ)常見的頭部名稱,以及常見的頭部名稱和值的組合。同時(shí)還會(huì)維護(hù)一份相同的動(dòng)態(tài)字典,這個(gè)字典可以實(shí)時(shí)被更新。第一次相互通信過后,后面的請(qǐng)求只需要發(fā)送與前面請(qǐng)求之間頭部不同的地方,其它的頭部信息都可以從字典中獲取。大大節(jié)省了網(wǎng)絡(luò)開銷。
- 服務(wù)端推送
在 HTTP1.x 中,如果用戶請(qǐng)求了資源 A,結(jié)果發(fā)現(xiàn)自己如果要用資源 A,那么必須依賴資源 B,這時(shí)他不得不再消耗一個(gè)請(qǐng)求。而 HTTP2.0 中,允許服務(wù)器主動(dòng)向客戶端 push 資源。也就是說當(dāng)服務(wù)器發(fā)現(xiàn)客戶端請(qǐng)求了資源 A,卻忘了請(qǐng)求資源 A 依賴的資源 B 時(shí),它可以主動(dòng)將資源 B 順手推送給客戶端。
- 多路復(fù)用
在 HTTP 2.0 中,一次連接建立后,只要這個(gè)連接還在,那么客戶端就可以在一個(gè)鏈接中
批量發(fā)起多個(gè)請(qǐng)求
。同時(shí),請(qǐng)求與請(qǐng)求間屬于并行
,不會(huì)互相阻塞。由此,徹底規(guī)避了隊(duì)頭阻塞問題。
常用方法
HTTP 協(xié)議常用的請(qǐng)求方法有 GET、POST、PUT、DELETE。
- GET :僅用作數(shù)據(jù)的讀取,請(qǐng)求參數(shù)以query的形式拼接到url
- POST :創(chuàng)建新資源或修改現(xiàn)有資源,請(qǐng)求參數(shù)以body的形式傳遞
- PUT :PUT 在能力上和 POST 類似,區(qū)別在于 PUT 的 URI 指向是具體的某個(gè)資源,而不能指向資源集合。
- DELETE:用于刪除指定的資源
頭部信息 (Headers)
http 在發(fā)出請(qǐng)求或者響應(yīng)時(shí),都會(huì)攜帶有header,其中存放了一些必要的信息,下面列舉常用的頭部信息。緩存相關(guān)的頭將在后續(xù)文章介紹。 更多頭部信息可以參考:httq請(qǐng)求頭/響應(yīng)頭
請(qǐng)求頭(request Headers)
- Accept: 瀏覽器可接受的數(shù)據(jù)格式
-
Accept-encoding: 瀏覽器
可接受的壓縮算法
,如gzip(服務(wù)器壓縮,客戶端解壓,讓傳輸?shù)馁Y源變小,速度更快) - Accept-Language: 瀏覽器可接收的語言,如zh-CN
- Connect:keep-alive 一次TCP連接重復(fù)使用
-
Cookie:
同域
每次請(qǐng)求資源都會(huì)把cookie帶上 -
Host:
請(qǐng)求的域名
- User-agent:簡稱UA,瀏覽器信息,標(biāo)識(shí)是什么瀏覽器,是什么系統(tǒng),供給服務(wù)器分析
-
Content-type:發(fā)送數(shù)據(jù)的格式(多存在于post請(qǐng)求中),如一般json數(shù)據(jù)為
application/json
,圖片或文件為multipart/form-data
響應(yīng)頭(response Headers)
-
Content-type:返回?cái)?shù)據(jù)的格式,如
application/json(json),text/html(html),text/css(css)、text/javascript(javascript)
、image/png
, -
Content-length:返回?cái)?shù)據(jù)的大小,多少字節(jié)
-
Content-Encoding:
返回?cái)?shù)據(jù)的壓縮算法
,如gzip -
Set-Cookie:
服務(wù)端需要通過該字段來修改瀏覽器中的cookie
狀態(tài)碼
1xx:成功接收了請(qǐng)求,但是處理過程還沒結(jié)束,需要客戶端再拋出一個(gè)請(qǐng)求才能完成整個(gè)過程。
2xx:表示成功接收請(qǐng)求、并且已經(jīng)處理完畢。
- 200 OK,標(biāo)識(shí)客戶端的請(qǐng)求已經(jīng)被服務(wù)器正確處理
3xx:表示服務(wù)器雖然也處理了你的請(qǐng)求,但客戶端還需要進(jìn)一步的工作,才可以完成請(qǐng)求。
-
301:永久性重定向,表示資源已被分配了新的 URL
-
302:臨時(shí)性重定向,表示資源臨時(shí)被分配了新的 URL
-
304,表示服務(wù)器校驗(yàn)后發(fā)現(xiàn)資源沒有改變,提醒客戶端直接走緩存來取資源
4xx:客戶端錯(cuò)誤,意味著請(qǐng)求出錯(cuò)了。
-
400:請(qǐng)求報(bào)文存在語法錯(cuò)誤
-
403:對(duì)請(qǐng)求資源的訪問被服務(wù)器拒絕(多半是沒權(quán)限)
-
404,資源不存在,可能是你的路徑不對(duì),也可能是這個(gè)資源在服務(wù)端已經(jīng)被下掉了
5xx:服務(wù)器錯(cuò)誤,意味著服務(wù)器內(nèi)部的程序處理有問題。
-
500:服務(wù)器在接受請(qǐng)求后進(jìn)行處理的過程中,發(fā)生了內(nèi)部錯(cuò)誤
-
502:網(wǎng)關(guān)錯(cuò)誤
-
504:網(wǎng)關(guān)超時(shí)
HTTP無狀態(tài)理解:cookie與session
HTTP無狀態(tài)協(xié)議,是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,簡單的說:前一刻發(fā)出的 A 請(qǐng)求,與下一刻發(fā)出的 B 請(qǐng)求, B 是完全
感知不到 A 請(qǐng)求過
的,兩個(gè)請(qǐng)求間毫無關(guān)系。
如果想維持狀態(tài)信息,需要使用cookie
和 session
。
- cooike
客戶端第一次向服務(wù)器端發(fā)送請(qǐng)求時(shí)是沒有cookie的,請(qǐng)求后服務(wù)器端會(huì)在cookie中存入一些數(shù)據(jù)。下次在訪問相同的服務(wù)器就會(huì)帶上cookie中的數(shù)據(jù)。
- session
實(shí)際上是一個(gè)對(duì)象,存儲(chǔ)在服務(wù)器端的內(nèi)存中,在session對(duì)象中也可以存儲(chǔ)多條數(shù)據(jù),每一條數(shù)據(jù)都有一個(gè)sessionid作為唯一標(biāo)識(shí)。
- 以登錄邏輯為例
1、 客戶輸入賬號(hào)密碼進(jìn)行登錄,服務(wù)器端進(jìn)行驗(yàn)證,驗(yàn)證成功則生成sessionId,并且在session對(duì)象中存儲(chǔ)當(dāng)前用戶信息。
2、 服務(wù)器端將sessionId寫入客戶端cookie中,當(dāng)客戶端下次訪問服務(wù)器端時(shí)cookie會(huì)被自動(dòng)發(fā)送給服務(wù)器端。
3、 服務(wù)器端在 cookie 中拿到 sessionId 然后在服務(wù)器端的 session 對(duì)象中查找 sessionId 進(jìn)行驗(yàn)證,驗(yàn)證成功說明用戶是登陸狀態(tài),則可以為其響應(yīng)只有在登陸狀態(tài)才能響應(yīng)的數(shù)據(jù)。
總結(jié)
-
HTTP 是什么
-
HTTP 發(fā)展歷程
-
常用方法
-
頭部信息 (Headers)
-
狀態(tài)碼文章來源:http://www.zghlxwxcb.cn/news/detail-465700.html
-
HTTP無狀態(tài)理解:cookie與session文章來源地址http://www.zghlxwxcb.cn/news/detail-465700.html
到了這里,關(guān)于瀏覽器網(wǎng)絡(luò)請(qǐng)求——HTTP詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!