Websocket原理

一序六、websocket與http

WebSocket是HTML5出的東西(協(xié)議),也就是說HTTP協(xié)議沒有變化例诀,或者說沒關(guān)系,但HTTP是不支持持久連接的(長連接暮刃,循環(huán)連接的不算)

首先HTTP有 1.11.0 之說爆土,也就是所謂的 keep-alive 诸蚕,把多個(gè)HTTP請求合并為一個(gè),但是 Websocket 其實(shí)是一個(gè)新協(xié)議背犯,跟HTTP協(xié)議基本沒有關(guān)系,只是為了兼容現(xiàn)有瀏覽器的握手規(guī)范而已倔矾,也就是說它是HTTP協(xié)議上的一種補(bǔ)充可以通過這樣一張圖理解

image

有交集,但是并不是全部丰包。

另外Html5是指的一系列新的API壤巷,或者說新規(guī)范,新技術(shù)胧华。Http協(xié)議本身只有1.0和1.1有巧,而且跟Html本身沒有直接關(guān)系柑潦。荧琼。通俗來說,你可以用HTTP協(xié)議傳輸非Html數(shù)據(jù)驶冒,就是這樣=。=

再簡單來說蜡歹,層級不一樣。

二铛漓、Websocket是什么樣的協(xié)議结笨,具體有什么優(yōu)點(diǎn)

首先赫模,Websocket是一個(gè)持久化的協(xié)議斩祭,相對于HTTP這種非持久的協(xié)議來說。簡單的舉個(gè)例子吧时迫,用目前應(yīng)用比較廣泛的PHP生命周期來解釋。

HTTP的生命周期通過 Request 來界定芥牌,也就是一個(gè) Request 一個(gè) Response 谬俄,那么在 HTTP1.0 中钥勋,這次HTTP請求就結(jié)束了乎婿。

在HTTP1.1中進(jìn)行了改進(jìn)森逮,使得有一個(gè)keep-alive,也就是說歪脏,在一個(gè)HTTP連接中哩照,可以發(fā)送多個(gè)Request,接收多個(gè)Response。但是請記住 Request = Response 版确, 在HTTP中永遠(yuǎn)是這樣绒疗,也就是說一個(gè)request只能有一個(gè)response。而且這個(gè)response也是被動(dòng)的,不能主動(dòng)發(fā)起。

教練脐嫂,你BB了這么多匀奏,跟Websocket有什么關(guān)系呢恒水?(:з」∠)好吧矢沿,我正準(zhǔn)備說Websocket呢疾嗅。。

首先Websocket是基于HTTP協(xié)議的玖像,或者說借用了HTTP的協(xié)議來完成一部分握手。

首先我們來看個(gè)典型的 Websocket 握手(借用Wikipedia的拔稳。。)

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

熟悉HTTP的童鞋可能發(fā)現(xiàn)了既棺,這段類似HTTP協(xié)議的握手請求中,多了幾個(gè)東西答捕。我會順便講解下作用蜘欲。

Upgrade: websocket
Connection: Upgrade

這個(gè)就是Websocket的核心了屿衅,告訴 Apache 剧罩、 Nginx 等服務(wù)器:注意啦,我發(fā)起的是Websocket協(xié)議香拉,快點(diǎn)幫我找到對應(yīng)的助理處理~不是那個(gè)老土的HTTP。

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

首先, Sec-WebSocket-Key 是一個(gè) Base64 encode 的值,這個(gè)是瀏覽器隨機(jī)生成的换淆,告訴服務(wù)器:泥煤谆趾,不要忽悠窩,我要驗(yàn)證尼是不是真的是Websocket助理辫樱。

然后缔逛, Sec_WebSocket-Protocol 是一個(gè)用戶定義的字符串脖旱,用來區(qū)分同URL下佳恬,不同的服務(wù)所需要的協(xié)議前痘。簡單理解:今晚我要服務(wù)A,別搞錯(cuò)啦~

最后拌阴, Sec-WebSocket-Version 是告訴服務(wù)器所使用的 Websocket Draft(協(xié)議版本),在最初的時(shí)候梨水,Websocket協(xié)議還在 Draft 階段摩钙,各種奇奇怪怪的協(xié)議都有宜岛,而且還有很多期奇奇怪怪不同的東西佑刷,什么Firefox和Chrome用的不是一個(gè)版本之類的鹿鳖,當(dāng)初Websocket協(xié)議太多可是一個(gè)大難題。胶台。不過現(xiàn)在還好,已經(jīng)定下來啦大家都使用的一個(gè)東西 脫水: 服務(wù)員,我要的是13歲的噢→_→

然后服務(wù)器會返回下列東西丘跌,表示已經(jīng)接受到請求昼接, 成功建立Websocket啦!

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

這里開始就是HTTP最后負(fù)責(zé)的區(qū)域了袒啼,告訴客戶纬纪,我已經(jīng)成功切換協(xié)議啦~

Upgrade: websocket
Connection: Upgrade

依然是固定的,告訴客戶端即將升級的是 Websocket 協(xié)議育八,而不是mozillasocket,lurnarsocket或者shitsocket实檀。

然后按声, Sec-WebSocket-Accept 這個(gè)則是經(jīng)過服務(wù)器確認(rèn),并且加密過后的 Sec-WebSocket-Key 须床。 服務(wù)器:好啦好啦渐裂,知道啦,給你看我的ID CARD來證明行了吧柒凉。。

后面的坦刀, Sec-WebSocket-Protocol 則是表示最終使用的協(xié)議蔬咬。

至此,HTTP已經(jīng)完成它所有工作了林艘,接下來就是完全按照Websocket協(xié)議進(jìn)行了北启。具體的協(xié)議就不在這闡述了拔第。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末场钉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子泳猬,更是在濱河造成了極大的恐慌宇植,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忙上,死亡現(xiàn)場離奇詭異闲坎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)腰懂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門绣溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人底哗,你說我怎么就攤上這事罢防。” “怎么了咒吐?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵恬叹,是天一觀的道長同眯。 經(jīng)常有香客問我绽昼,道長须蜗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任缭付,我火速辦了婚禮循未,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘的妖。我一直安慰自己,他們只是感情好娇未,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布星虹。 她就那樣靜靜地躺著零抬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搁凸。 梳的紋絲不亂的頭發(fā)上媚值,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音护糖,去河邊找鬼褥芒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嫡良,可吹牛的內(nèi)容都是我干的锰扶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼寝受,長吁一口氣:“原來是場噩夢啊……” “哼坷牛!你這毒婦竟也來了很澄?” 一聲冷哼從身側(cè)響起京闰,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甩苛,沒想到半個(gè)月后蹂楣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讯蒲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年痊土,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墨林。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赁酝,死狀恐怖犯祠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酌呆,我是刑警寧澤衡载,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站肪笋,受9級特大地震影響月劈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜藤乙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一猜揪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坛梁,春花似錦而姐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至褐缠,卻和暖如春政鼠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背队魏。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工公般, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胡桨。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓官帘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昧谊。 傳聞我的和親對象是個(gè)殘疾皇子刽虹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容