摘要:注意實(shí)際上指的是一種協(xié)議,與我們熟知的協(xié)議是同等的一個(gè)網(wǎng)絡(luò)協(xié)議。協(xié)議與的聯(lián)系是指的一系列新的,或者說新規(guī)范,新技術(shù)。注意下面的請求報(bào)文與響應(yīng)報(bào)文中的內(nèi)容不是完整的報(bào)文,而是基于請求響應(yīng)報(bào)文添加的內(nèi)容。
背景
以前的網(wǎng)站為了實(shí)現(xiàn)推送功能,使用的方法都是輪詢。所謂的輪詢就是在特定的時(shí)間間隔(例如1秒),由瀏覽器向服務(wù)器發(fā)出一個(gè) Http request,然后服務(wù)器返回最新的數(shù)據(jù)給客戶端瀏覽器,從而給出一種服務(wù)端實(shí)時(shí)推送的假象。由于Http Request的Header(請求頭)很長,而傳輸?shù)臄?shù)據(jù)可能很短就只占一點(diǎn)點(diǎn),每次請求消耗的帶寬大部分都消耗在 Header上。從網(wǎng)上資料得知后來還有改進(jìn)的輪詢方法叫做 Comet,使用 Ajax。但這種技術(shù)雖然可達(dá)到雙向通信,但依然需要發(fā)出請求,而且在Comet中,普遍采用了長鏈接,這也會(huì)大量消耗服務(wù)器帶寬和資源。
所以HTML5定義了 WebSocket 協(xié)議,以及相關(guān)的編程API,能更好的實(shí)現(xiàn)雙向通信且節(jié)省服務(wù)器資源和帶寬。
注意: WebSocket 實(shí)際上指的是一種協(xié)議,與我們熟知的 Http 協(xié)議是同等的一個(gè)網(wǎng)絡(luò)協(xié)議。用網(wǎng)絡(luò)模型結(jié)構(gòu)來解釋的話, WebSocket 和 Http 協(xié)議都屬于 應(yīng)用層協(xié)議,兩者都基于傳輸層協(xié)議 TCP。
WebSocket 協(xié)議
與HTML5的聯(lián)系
Html5是指的一系列新的API,或者說新規(guī)范,新技術(shù)。在這個(gè)新規(guī)范中定義了一個(gè)為了實(shí)現(xiàn)雙向?qū)崟r(shí)通信的新協(xié)議 WebSocket,并且提供了一套 JavaScript API 供開發(fā)者來調(diào)用實(shí)現(xiàn)通信。服務(wù)器端的實(shí)現(xiàn)由諸如:Tomcat、Jetty等等。
與Http協(xié)議的聯(lián)系
簡單概括來看: WebSocket 不是 Http 協(xié)議, Http 協(xié)議只是被 WebSocket 使用來建立 WebSocket 連接,連接建立了以后客戶端與服務(wù)器的雙向通信就與 Http 無關(guān)了。
WebSocket 協(xié)議和 HTTP 協(xié)議是兩種不同的東西,它們的聯(lián)系如下:
客戶端開始建立 WebSocket 連接時(shí)要發(fā)送一個(gè) header 標(biāo)記了 Upgrade 的 HTTP 請求,表示請求協(xié)議升級。所以服務(wù)器端做出響應(yīng)的簡便方法是,直接在現(xiàn)有的 HTTP 服務(wù)器軟件和現(xiàn)有的端口上實(shí)現(xiàn) WebSocket 協(xié)議,重用現(xiàn)有代碼(比如解析和認(rèn)證這個(gè) HTTP 請求。如果在 TCP 協(xié)議上實(shí)現(xiàn),這兩個(gè)功能就要重新實(shí)現(xiàn)),然后再回一個(gè)狀態(tài)碼為 101 的 HTTP 響應(yīng)完成握手,再往后發(fā)送數(shù)據(jù)時(shí)就沒 HTTP 的事了。 **例子** 下面給出發(fā)出建立連接請求時(shí)的 request 和 response。 注意:下面的請求報(bào)文與響應(yīng)報(bào)文中的內(nèi)容不是完整的報(bào)文,而是 WebSocket 基于 Http 請求(響應(yīng))報(bào)文添加的內(nèi)容。 瀏覽器請求
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: null
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13
服務(wù)器回應(yīng)
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://example.com/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30373.html
摘要:使用約定好的計(jì)算握手消息,并使用生產(chǎn)的隨機(jī)數(shù)對消息進(jìn)行加密,最后將之前生成的所有消息發(fā)送給網(wǎng)站。之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對稱加密算法進(jìn)行加密。支持四個(gè)異步事件。 由于HTTP沒有加密機(jī)制,其傳輸?shù)膬?nèi)容很容易泄漏,并且HTTP協(xié)議沒法確認(rèn)通信方,也無法保證接收到的報(bào)文在傳輸過程中是否被篡改,因此HTTPS是在HTTP協(xié)議的基礎(chǔ)上提供了加密、認(rèn)證和完整性保護(hù)的功...
摘要:幀是發(fā)送數(shù)據(jù)的基本單位,下邊是它的報(bào)文格式報(bào)文內(nèi)容中規(guī)定了數(shù)據(jù)標(biāo)示操作代碼掩碼數(shù)據(jù)數(shù)據(jù)長度等格式。首先我們明白了客戶端和服務(wù)端進(jìn)行消息傳遞是這樣的客戶端將消息切割成多個(gè)幀,并發(fā)送給服務(wù)端。服務(wù)端接收消息幀,并將關(guān)聯(lián)的幀重新組裝成完整的消息。 本文概述 Web Sockets的目標(biāo)是在一個(gè)單獨(dú)的持久連接上提供全雙工、雙向通信。在Javascript創(chuàng)建了Web Socket之后,會(huì)有一個(gè)...
摘要:幀是發(fā)送數(shù)據(jù)的基本單位,下邊是它的報(bào)文格式報(bào)文內(nèi)容中規(guī)定了數(shù)據(jù)標(biāo)示操作代碼掩碼數(shù)據(jù)數(shù)據(jù)長度等格式。首先我們明白了客戶端和服務(wù)端進(jìn)行消息傳遞是這樣的客戶端將消息切割成多個(gè)幀,并發(fā)送給服務(wù)端。服務(wù)端接收消息幀,并將關(guān)聯(lián)的幀重新組裝成完整的消息。 本文概述 Web Sockets的目標(biāo)是在一個(gè)單獨(dú)的持久連接上提供全雙工、雙向通信。在Javascript創(chuàng)建了Web Socket之后,會(huì)有一個(gè)...
閱讀 3132·2021-11-15 18:14
閱讀 1786·2021-09-22 10:51
閱讀 3301·2021-09-09 09:34
閱讀 3516·2021-09-06 15:02
閱讀 1035·2021-09-01 11:40
閱讀 3195·2019-08-30 13:58
閱讀 2535·2019-08-30 11:04
閱讀 1090·2019-08-28 18:31