HTTP七層協(xié)議:
從網(wǎng)絡(luò)分層模型OSI來講,由上至下為:
應(yīng)用層 -> 表示層 -> 會話層 -> 傳輸層 -> 網(wǎng)絡(luò)層 -> 數(shù)據(jù)鏈路層 -> 物理層
順序參考 https://blog.csdn.net/u011619283/article/details/52679504
功能參考 https://blog.csdn.net/u011774517/article/details/67631439
TCP/IP五層模型的協(xié)議分為:
應(yīng)用層奶赔、傳輸層栓撞、網(wǎng)絡(luò)層冲甘、數(shù)據(jù)鏈路層和物理層
參考: https://blog.csdn.net/a5582ddff/article/details/77731537
注意:
1湾蔓、 HTTP協(xié)議對應(yīng)于應(yīng)用層,TCP協(xié)議對應(yīng)于傳輸層壹甥,IP協(xié)議對應(yīng)于網(wǎng)絡(luò)層救巷,HTTP協(xié)議是基于TCP連接的,三者本質(zhì)上沒有可比性。 TCP/IP是傳輸層協(xié)議句柠,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸浦译;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)溯职。Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層精盅,是它的一組接口。
2谜酒、傳輸層主要有兩個協(xié)議叹俏,分別是 TCP 和 UDP。TCP 比 UDP 更可靠甚带。你可以把 TCP 協(xié)議想象成某個水管她肯,發(fā)送端這頭進(jìn)水佳头,接收端那頭就出水鹰贵。并且 TCP 協(xié)議能夠確保晴氨,先發(fā)送的數(shù)據(jù)先到達(dá)(與之相反,UDP 不保證這點(diǎn))
HTTP:
一碉输、 定義:
HTTP是一個客戶端和服務(wù)器端請求和應(yīng)答的標(biāo)準(zhǔn)(TCP)籽前。客戶端是終端用戶敷钾,服務(wù)器端是網(wǎng)站枝哄。通過使用Web瀏覽器、網(wǎng)絡(luò)爬蟲或者其它的工具阻荒,客戶端發(fā)起一個到服務(wù)器上指定端口(默認(rèn)端口的HTTP請求挠锥。(我們稱這個客戶端)叫用戶代理(user agent)。應(yīng)答的服務(wù)器上存儲著(一些)資源侨赡,比如HTML文件和圖像蓖租。(我們稱)這個應(yīng)答服務(wù)器為源服務(wù)器(origin server)。
二羊壹、過程:
通常蓖宦,由HTTP客戶端發(fā)起一個請求,建立一個到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接油猫。HTTP服務(wù)器則在那個端口監(jiān)聽客戶端發(fā)送過來的請求稠茂。一旦收到請求,服務(wù)器(向客戶端)發(fā)回一個狀態(tài)行情妖,比如"HTTP/1.1 200 OK"睬关,和(響應(yīng)的)消息,消息的消息體可能是請求的文件毡证、錯誤消息共螺、或者其它一些信息。
三情竹、HTTP狀態(tài)
1xx:信息響應(yīng)類藐不,表示接收到請求并且繼續(xù)處理
2xx:處理成功響應(yīng)類,表示動作被成功接收秦效、理解和接受
3xx:重定向響應(yīng)類雏蛮,為了完成指定的動作,必須接受進(jìn)一步處理
4xx:客戶端錯誤阱州,客戶請求包含語法錯誤或者是不能正確執(zhí)行
5xx:服務(wù)端錯誤挑秉,服務(wù)器不能正確執(zhí)行一個正確的請求
四、Http協(xié)議與TCP協(xié)議
TCP協(xié)議對應(yīng)于傳輸層苔货,而HTTP協(xié)議對應(yīng)于應(yīng)用層
1犀概、定義:
a. HTTP(超文本傳輸協(xié)議)
HTTP 是一個基于請求與響應(yīng)模式的立哑、無狀態(tài)的、應(yīng)用層的協(xié)議姻灶,愁醮拢基于TCP的連接方式,HTTP1.1版本中給出一種持續(xù)連接的機(jī)制产喉,絕大多數(shù)的Web開發(fā)捂掰,都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用。
b. TCP (傳輸控制協(xié)議)
TCP是主機(jī)對主機(jī)層的傳輸控制協(xié)議曾沈,提供可靠的連接服務(wù)这嚣,采用三次握手確認(rèn)建立一個連接。
位碼即tcp標(biāo)志位,有6種標(biāo)示: SYN(建立聯(lián)機(jī)) ACK(確認(rèn)) PSH(傳送) FIN(結(jié)束) RST(重置) URG(緊急) Sequence number(順序號碼) Acknowledge number(確認(rèn)號碼)
2塞俱、應(yīng)用:
Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上的姐帚,當(dāng)瀏覽器需要從服務(wù)器獲取網(wǎng)頁數(shù)據(jù)的時候,會發(fā)出一次Http請求障涯。Http會通過TCP建立起一個到服務(wù)器的連接通道罐旗,當(dāng)本次請求需要的數(shù)據(jù)完畢后,Http會立即將TCP連接斷開像樊,這個過程是很短的尤莺。所以Http連接是一種短連接,是一種無狀態(tài)的連接生棍。所謂的無狀態(tài)颤霎,是指瀏覽器每次向服務(wù)器發(fā)起請求的時候,不是通過一個連接涂滴,而是每次都建立一個新的連接友酱。如果是一個連接的話,服務(wù)器進(jìn)程中就能保持住這個連接并且在內(nèi)存中記住一些信息狀態(tài)柔纵。而每次請求結(jié)束后缔杉,連接就關(guān)閉,相關(guān)的內(nèi)容就釋放了搁料,所以記不住任何狀態(tài)或详,成為無狀態(tài)連接。
3郭计、HTTP協(xié)議 ------ TCP三次握手和四次揮手
參考:https://blog.csdn.net/qq_33535433/article/details/76396341
4霸琴、Socket連接與HTTP連接的不同
a. 通常情況下Socket連接就是TCP連接昭伸,因此Socket連接一旦建立,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容庐杨,直到雙方連接斷開夹供。但在實際應(yīng)用中仁堪,客戶端到服務(wù)器之間的通信防火墻默認(rèn)會關(guān)閉長時間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連,因此需要通過輪詢告訴網(wǎng)絡(luò)枝笨,該連接處于活躍狀態(tài)揭蜒。
b. 而HTTP連接使用的是“請求—響應(yīng)”的方式,不僅在請求時需要先建立連接屉更,而且需要客戶端向服務(wù)器發(fā)出請求后,服務(wù)器端才能回復(fù)數(shù)據(jù)欺冀。
五、WebSocket
1隐轩、定義:
WebSocket同HTTP一樣也是應(yīng)用層的協(xié)議渤早,但是它是一種雙向通信協(xié)議,是建立在TCP之上的鹊杖。
2、連接過程 ------- 握手過程
a>. 瀏覽器积瞒、服務(wù)器建立TCP連接,三次握手茫孔。這是通信的基礎(chǔ)被芳,傳輸控制層,若失敗后續(xù)都不執(zhí)行筐钟。
b>. TCP連接成功后,瀏覽器通過HTTP協(xié)議向服務(wù)器傳送WebSocket支持的版本號等信息李破。(開始前的HTTP握手)
c>. 服務(wù)器收到客戶端的握手請求后宠哄,同樣采用HTTP協(xié)議回饋數(shù)據(jù)毛嫉。
d>. 當(dāng)收到了連接成功的消息后妇菱,通過TCP通道進(jìn)行傳輸通信。
3闯团、WebSocket和Socket的區(qū)別
Socket其實并不是一個協(xié)議,而是為了方便使用TCP或UDP而抽象出來的一層彻舰,是位于應(yīng)用層和傳輸控制層之間的一組接口。
WebSocket則是一個典型的應(yīng)用層協(xié)議刃唤。
4白群、WebSocket與HTTP的關(guān)系
相同點(diǎn):
都是一樣基于TCP的,都是可靠性傳輸協(xié)議帜慢。
都是應(yīng)用層協(xié)議。
不同點(diǎn):
WebSocket是雙向通信協(xié)議侍咱,模擬Socket協(xié)議,可以雙向發(fā)送或接受信息楔脯。HTTP是單向的胯甩。
WebSocket是需要握手進(jìn)行建立連接的。
- 二者的聯(lián)系
WebSocket在建立握手時偎箫,數(shù)據(jù)是通過HTTP傳輸?shù)摹5墙⒅竺颊恚谡嬲齻鬏敃r候是不需要HTTP協(xié)議的。
5、具體應(yīng)用:
參考 https://www.cnblogs.com/luoxiaowei/p/6952104.html