WebSocket和HTTP的區(qū)別
http協(xié)議是用在應(yīng)用層的協(xié)議阐枣,他是基于tcp協(xié)議的畴蒲,http協(xié)議建立鏈接也必須要有三次握手才能發(fā)送信息伞辛。
http鏈接分為短鏈接,長(zhǎng)鏈接蜒简,短鏈接是每次請(qǐng)求都要三次握手才能發(fā)送自己的信息。即每一個(gè)request對(duì)應(yīng)一個(gè)response漩仙。長(zhǎng)鏈接是在一定的期限內(nèi)保持鏈接搓茬。保持TCP連接不斷開《铀客戶端與服務(wù)器通信卷仑,必須要有客戶端發(fā)起然后服務(wù)器返回結(jié)果◆镎郏客戶端是主動(dòng)的锡凝,服務(wù)器是被動(dòng)的。
WebSocket他是為了解決客戶端發(fā)起多個(gè)http請(qǐng)求到服務(wù)器資源瀏覽器必須要經(jīng)過長(zhǎng)時(shí)間的輪訓(xùn)問題而生的垢啼,他實(shí)現(xiàn)了多路復(fù)用窜锯,他是全雙工通信。在webSocket協(xié)議下客服端和瀏覽器可以同時(shí)發(fā)送信息芭析。
建立了WenSocket之后服務(wù)器不必在瀏覽器發(fā)送request請(qǐng)求之后才能發(fā)送信息到瀏覽器锚扎。這時(shí)的服務(wù)器已有主動(dòng)權(quán)想什么時(shí)候發(fā)就可以發(fā)送信息到服務(wù)器。而且信息當(dāng)中不必在帶有head的部分信息了與http的長(zhǎng)鏈接通信來說馁启,這種方式驾孔,不僅能降低服務(wù)器的壓力。而且信息當(dāng)中也減少了部分多余的信息惯疙。
HTTP的長(zhǎng)連接與websocket的持久連接
HTTP1.1的連接默認(rèn)使用長(zhǎng)連接(persistent connection)翠勉,即在一定的期限內(nèi)保持鏈接,客戶端會(huì)需要在短時(shí)間內(nèi)向服務(wù)端請(qǐng)求大量的資源螟碎,保持TCP連接不斷開眉菱。客戶端與服務(wù)器通信掉分,必須要有客戶端發(fā)起然后服務(wù)器返回結(jié)果俭缓。客戶端是主動(dòng)的酥郭,服務(wù)器是被動(dòng)的华坦。在一個(gè)TCP連接上可以傳輸多個(gè)Request/Response消息對(duì),所以本質(zhì)上還是Request/Response消息對(duì)不从,仍然會(huì)造成資源的浪費(fèi)惜姐、實(shí)時(shí)性不強(qiáng)等問題。如果不是持續(xù)連接,即短連接歹袁,那么每個(gè)資源都要建立一個(gè)新的連接坷衍,HTTP底層使用的是TCP,那么每次都要使用三次握手建立TCP連接条舔,即每一個(gè)request對(duì)應(yīng)一個(gè)response枫耳,將造成極大的資源浪費(fèi)。
長(zhǎng)輪詢孟抗,即客戶端發(fā)送一個(gè)超時(shí)時(shí)間很長(zhǎng)的Request迁杨,服務(wù)器hold住這個(gè)連接,在有新數(shù)據(jù)到達(dá)時(shí)返回Response
websocket的持久連接
只需建立一次Request/Response消息對(duì)凄硼,之后都是TCP連接铅协,避免了需要多次建立Request/Response消息對(duì)而產(chǎn)生的冗余頭部信息。
WebSocket原理
WebSocket協(xié)議是html5的一種通信協(xié)議摊沉,該協(xié)議兼容我們常用的瀏覽器狐史。例如Chrome、 Firefox坯钦、IE等预皇。它可以使客戶端和服務(wù)端雙向數(shù)據(jù)傳輸更加簡(jiǎn)單快捷,并且在TCP連接進(jìn)行一次握手后婉刀,就可以持久性聯(lián)接吟温,同時(shí)允許服務(wù)端對(duì)客戶端推送數(shù)據(jù)。外加傳統(tǒng)模式的協(xié)議一般HTTP請(qǐng)求可能會(huì)包含較長(zhǎng)的頭部突颊,但真正有效的可能只有小部分鲁豪,從而就占用了很多資源和帶寬。因此WebSocket協(xié)議不僅可以實(shí)時(shí)通訊律秃,支持?jǐn)U展爬橡;也可以壓縮節(jié)省服務(wù)器資源和帶寬。 WS協(xié)議和WSS協(xié)議兩個(gè)均是WebSocket協(xié)議的SCHEM棒动,兩者一個(gè)是非安全的糙申,一個(gè)是安全的。也是統(tǒng)一的資源標(biāo)志符船惨。就好比HTTP協(xié)議和HTTPS協(xié)議的差別柜裸。非安全的沒有證書,安全的需要SSL證書粱锐。(SSL是Netscape所研發(fā)疙挺,用來保障網(wǎng)絡(luò)中數(shù)據(jù)傳輸?shù)陌踩裕饕沁\(yùn)用數(shù)據(jù)加密的技術(shù)怜浅,能夠避免數(shù)據(jù)在傳輸過程被不被竊取或者監(jiān)聽铐然。)其中WSS表示在TLS之上的WebSocket。WS一般默認(rèn)是80端口,而WSS默認(rèn)是443端口搀暑,大多數(shù)網(wǎng)站用的就是80和433端口沥阳。(在高防防護(hù)過程中,80和433端口的網(wǎng)站是需要備案才可以接入國(guó)內(nèi)的险掀。)當(dāng)然網(wǎng)站也會(huì)有別的端口沪袭,這種如果做高防是方案是可以用海外高防的。WS和WSS的體現(xiàn)形式分別是TCP+WS AS WS 樟氢,TCP+TLS+WS AS WS。服務(wù)器網(wǎng)址就是 URL侠鳄。最后墨者安全再說下WebSocket協(xié)議的特點(diǎn):建立在 TCP 協(xié)議之上埠啃,服務(wù)端實(shí)現(xiàn)容易;與 HTTP 協(xié)議有良好的兼容性伟恶,握手時(shí)不容易被屏蔽碴开,可以通過各種 HTTP 代理服務(wù)器;數(shù)據(jù)輕量博秫,實(shí)時(shí)通訊潦牛;可以發(fā)送文本和二進(jìn)制數(shù)據(jù)。不限制同源挡育,客戶端可以與任意服務(wù)器端進(jìn)行通訊巴碗。因此WebSocket協(xié)議的出現(xiàn),為很多人解決了關(guān)于擴(kuò)展以及兼容性協(xié)議的煩惱問題即寒。