網(wǎng)絡(luò)分層模型和應(yīng)用協(xié)議
1. 分層模型
1.1 五層網(wǎng)絡(luò)模型
網(wǎng)絡(luò)要解決的問題是:兩個(gè)程序之間如何交換數(shù)據(jù)。
四層?五層?七層?
2. 應(yīng)用層協(xié)議
2.1 URL
URL(uniform resource locator,統(tǒng)一資源定位符)用于定位網(wǎng)絡(luò)服務(wù)
- 當(dāng)協(xié)議是
http
端口為80
時(shí),端口可以省略 - 當(dāng)協(xié)議是
https
端口為443
時(shí),端口可以省略 -
schema
、domain
、path
是必填的,其他的根據(jù)具體的要求填寫
2.2 HTTP
超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)是一個(gè)廣泛運(yùn)用于互聯(lián)網(wǎng)的應(yīng)用層協(xié)議。
該協(xié)議包含了傳遞信息的模式和格式。
HTTP 協(xié)議的特點(diǎn):
-
基于TCP協(xié)議: 面向連接,安全
TCP是一種面向連接的(建立連接之前是需要經(jīng)過三次握手)、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,在數(shù)據(jù)傳輸方面更安全
-
基于請(qǐng)求-響應(yīng)模型: 一次請(qǐng)求對(duì)應(yīng)一次響應(yīng)(先請(qǐng)求后響應(yīng))
請(qǐng)求和響應(yīng)是一一對(duì)應(yīng)關(guān)系,沒有請(qǐng)求,就沒有響應(yīng)
-
HTTP協(xié)議是無狀態(tài)協(xié)議: 對(duì)于數(shù)據(jù)沒有記憶能力。每次請(qǐng)求-響應(yīng)都是獨(dú)立的
無狀態(tài)指的是客戶端發(fā)送HTTP請(qǐng)求給服務(wù)端之后,服務(wù)端根據(jù)請(qǐng)求響應(yīng)數(shù)據(jù),響應(yīng)完后,不會(huì)記錄任何信息。
- 缺點(diǎn): 多次請(qǐng)求間不能共享數(shù)據(jù)
- 優(yōu)點(diǎn): 速度快
請(qǐng)求之間無法共享數(shù)據(jù)會(huì)引發(fā)的問題:
- 如:京東購(gòu)物。加入購(gòu)物車和去購(gòu)物車結(jié)算是兩次請(qǐng)求
- 由于HTTP協(xié)議的無狀態(tài)特性,加入購(gòu)物車請(qǐng)求響應(yīng)結(jié)束后,并未記錄加入購(gòu)物車是何商品
- 發(fā)起去購(gòu)物車結(jié)算的請(qǐng)求后,因?yàn)闊o法獲取哪些商品加入了購(gòu)物車,會(huì)導(dǎo)致此次請(qǐng)求無法正確展示數(shù)據(jù)
具體使用的時(shí)候,我們發(fā)現(xiàn)京東是可以正常展示數(shù)據(jù)的,原因是使用會(huì)話技術(shù)(Cookie、Session)來解決這個(gè)問題。
2.2.1 傳遞信息的模式
HTTP使用了一種極為簡(jiǎn)單的消息傳遞模式,「請(qǐng)求-響應(yīng)」模式。發(fā)起請(qǐng)求的稱之為客戶端,接收請(qǐng)求并完成響應(yīng)的稱之為服務(wù)器?!刚?qǐng)求-響應(yīng)」完成后,一次交互結(jié)束。
2.2.2 傳遞信息的格式
請(qǐng)求行
請(qǐng)求頭
請(qǐng)求體
舉個(gè)例子:
安裝插件:REST Clinet
點(diǎn)擊 Send Request
,發(fā)送請(qǐng)求,然后可以查看響應(yīng)的響應(yīng)行,響應(yīng)頭和響應(yīng)體。
分析關(guān)鍵信息:
- 常見的請(qǐng)求方法有:
請(qǐng)求方式 | 請(qǐng)求說明 |
---|---|
GET | 獲取資源。 向特定的資源發(fā)出請(qǐng)求。例:http://www.baidu.com/s?wd=itheima |
POST | 傳輸實(shí)體主體。 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例:上傳文件),數(shù)據(jù)被包含在請(qǐng)求體中。 |
OPTIONS | 返回服務(wù)器針對(duì)特定資源所支持的HTTP請(qǐng)求方式。 因?yàn)椴⒉皇撬械姆?wù)器都支持規(guī)定的方法,為了安全有些服務(wù)器可能會(huì)禁止掉一些方法,例如:DELETE、PUT等。那么OPTIONS就是用來詢問服務(wù)器支持的方法。 |
HEAD | 獲得報(bào)文首部。 HEAD方法類似GET方法,但是不同的是HEAD方法不要求返回?cái)?shù)據(jù)。通常用于確認(rèn)URI的有效性及資源更新時(shí)間等。 |
PUT | 傳輸文件。 PUT方法用來傳輸文件。類似FTP協(xié)議,文件內(nèi)容包含在請(qǐng)求報(bào)文的實(shí)體中,然后請(qǐng)求保存到URL指定的服務(wù)器位置。 |
DELETE | 刪除文件。 請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源 |
TRACE | 追蹤路徑。 回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷 |
CONNECT | 要求用隧道協(xié)議連接代理。 HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器 |
GET請(qǐng)求和POST請(qǐng)求的區(qū)別:
區(qū)別方式 | GET請(qǐng)求 | POST請(qǐng)求 |
---|---|---|
請(qǐng)求參數(shù) | 請(qǐng)求參數(shù)在請(qǐng)求行中。 例:/brand/findAll?name=OPPO&status=1 |
請(qǐng)求參數(shù)在請(qǐng)求體中 |
請(qǐng)求參數(shù)長(zhǎng)度 | 請(qǐng)求參數(shù)長(zhǎng)度有限制(瀏覽器不同限制也不同) | 請(qǐng)求參數(shù)長(zhǎng)度沒有限制 |
安全性 | 安全性低。原因:請(qǐng)求參數(shù)暴露在瀏覽器地址欄中。 | 安全性相對(duì)高 |
關(guān)于請(qǐng)求方法的協(xié)議原文見 HTTP/1.1規(guī)范RFC7231-Chapter4
-
請(qǐng)求路徑
path + query
-
協(xié)議
-
請(qǐng)求頭
Host
標(biāo)注了URL
地址中的Domain + Port
,比如:Host: www.taobao.com
。Content-type
指出客戶端給服務(wù)器的請(qǐng)求體格式,比如:Content-Type: application/json
。比如:
Host: 表示請(qǐng)求的主機(jī)名 User-Agent: 瀏覽器版本。 例如:Chrome瀏覽器的標(biāo)識(shí)類似Mozilla/5.0 ...Chrome/79 ,IE瀏覽器的標(biāo)識(shí)類似Mozilla/5.0 (Windows NT ...)like Gecko Accept:表示瀏覽器能接收的資源類型,如text/*,image/*或者*/*表示所有; Accept-Language:表示瀏覽器偏好的語言,服務(wù)器可以據(jù)此返回不同語言的網(wǎng)頁(yè); Accept-Encoding:表示瀏覽器可以支持的壓縮類型,例如gzip, deflate等。 Content-Type:請(qǐng)求主體的數(shù)據(jù)類型 Content-Length:數(shù)據(jù)主體的大?。▎挝唬鹤止?jié))
-
請(qǐng)求體
比如:
Content-Type: application/x-www-form-urlencoded loginId=admin&loginPwd=123123
Content-Type: application/json { "loginId": "admin", "loginPwd": "123123" }
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryraPtlntBIqy4X2Ho ------WebKitFormBoundaryraPtlntBIqy4X2Ho Content-Disposition: form-data; name="loginId" admin ------WebKitFormBoundaryraPtlntBIqy4X2Ho Content-Disposition: form-data; name="loginPwd" 123456 ------WebKitFormBoundaryraPtlntBIqy4X2Ho--
-
響應(yīng)碼
這是響應(yīng)碼一般情況,但實(shí)際情況還要看公司后端人為決定。
常見的狀態(tài)碼有:
-
200 OK:一切正常。
-
301 Moved Permanently:資源已被永久重定向。
你的請(qǐng)求我收到了,但是你要的東西不在這個(gè)地址了,已經(jīng)永遠(yuǎn)的把它移動(dòng)到了一個(gè)新的地址,麻煩你請(qǐng)求新的地址,地址我放到了響應(yīng)頭的Location中了
舉個(gè)例子:www.douyutv.com 重定向到 www.douyu.com。
-
302 Found:資源已被臨時(shí)重定向。
你的請(qǐng)求我收到了,但是你要的東西不在這個(gè)地址了,我臨時(shí)的把它移動(dòng)到了一個(gè)新的地址,麻煩你取請(qǐng)求新的地址,地址我放到了請(qǐng)求頭的Location中了
舉個(gè)例子:國(guó)內(nèi) bing 的重定向(不會(huì)還有人不知道自己一直訪問的是 cn.bing.com,而不是 www.bing.com,不會(huì)吧不會(huì)吧~~~)
-
304 Not Modified:文檔內(nèi)容未被修改。
你的請(qǐng)求我收到了,你要的東西跟之前是一樣的,沒有任何的變化,所以我就不給你結(jié)果了,你自己就用以前的吧。啥?你沒有緩存以前的內(nèi)容,關(guān)我啥事
-
400 Bad Request:語義有誤,當(dāng)前請(qǐng)求無法被服務(wù)器理解。
-
403 Forbidden:服務(wù)器拒絕執(zhí)行。
-
404 Not Found:資源不存在。
-
500 Internal Server Error:服務(wù)器內(nèi)部錯(cuò)誤。
-
-
響應(yīng)頭 -
Content-Type
Content-Type
標(biāo)注了附帶的響應(yīng)體是什么格式。文章來源:http://www.zghlxwxcb.cn/news/detail-720596.html常見的值有:文章來源地址http://www.zghlxwxcb.cn/news/detail-720596.html
-
text/plain
: 普通的純文本 -
text/html
:html文檔 -
text/javascript
或application/javascript
:js代碼 -
text/css
:css代碼 -
image/jpeg
:jpg圖片 -
attachment
:附件 - 其他
MIME
類型
-
到了這里,關(guān)于【計(jì)算機(jī)網(wǎng)絡(luò)】分層模型和應(yīng)用協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!