WebHooks、WebSocket 、SSE(Server-sent Events)]適用場景調(diào)研

WebHooks

定義

? Webhook一個web自定義回調(diào)函數(shù),當(dāng)程序發(fā)生警報行為時,會自動回調(diào)調(diào)用指定的url。webhook的回調(diào)url可以是第三方應(yīng)用,可以是webhook內(nèi)應(yīng)用。

? 在Webhook范式下,服務(wù)器更新所需提供的資源,然后自動將其作為更新發(fā)送到客戶端(服務(wù)器是在推數(shù)據(jù)),客戶端不是請求者,而是被動接收方。這種控制關(guān)系的反轉(zhuǎn)可以用來促進(jìn)許多原本需要在遠(yuǎn)程服務(wù)器上進(jìn)行更復(fù)雜的請求和不斷的輪詢的通信請求。

使用

? 消費一個webhook是為webhook準(zhǔn)備一個URL,用于webhook發(fā)送請求。這些通常由后臺頁面和或者API完成。這就意味你的應(yīng)用要設(shè)置一個通過公網(wǎng)可以訪問的URL。

? 多數(shù)webhook以兩種數(shù)據(jù)格式發(fā)布數(shù)據(jù):JSON或者XML,這需要解釋。另一種數(shù)據(jù)格式是application/x-www-form-urlencoded or multipart/form-data。這兩種方式都很容易解析,并且多數(shù)的Web應(yīng)用架構(gòu)都可以做這部分工作。

適用場景

? 高安全的支付、微信登錄(OAuth)、資源同步、資源創(chuàng)建與更新、耗時較長。

? 例A:
? 你需要向視頻處理服務(wù)器上傳一個視頻、你需要獲得視頻處理后的結(jié)果,然而視頻處理服務(wù)器上視頻很多,在排隊進(jìn)行處理,你不能立刻獲取到視頻的處理結(jié)果,此時你可以設(shè)計一個hook url,當(dāng)視頻處理完成后,視頻處理服務(wù)器自動向你的hook url發(fā)送請求,告訴你視頻已經(jīng)處理完畢。

? 例B:

? 你的好友發(fā)了一條朋友圈,后端將這條消息推送給所有其他好友的客戶端,就是 Webhooks 的典型場景。

安全性

? 由于webhook會向公網(wǎng)上的hook url發(fā)送數(shù)據(jù),這就意味著某些不好心的人可能會找到這個url,從而進(jìn)行發(fā)送錯誤的數(shù)據(jù),但是我們可以通過以下一些技術(shù)手段來解決這個問題:

  • 增加token機制

  • 增加auth認(rèn)證

  • 只接收對應(yīng)服務(wù)端domain或IP請求

  • 數(shù)據(jù)簽名

需要注意問題

  • 當(dāng)服務(wù)提供者通過web hook將數(shù)據(jù)發(fā)送你的服務(wù)端后,就不會再去關(guān)注這些數(shù)據(jù)。假設(shè)你的服務(wù)端此時出現(xiàn)了崩潰,或者無法請求成功等原因,就需要主動去嘗試請求數(shù)據(jù)。

  • webhook會發(fā)出大量的請求,可能會造成你的應(yīng)用阻塞,在此需要確保你的應(yīng)用能夠處理好這些請求

WebSocket

定義

? WebSocket是一種在單個TCP連接上進(jìn)行全雙工通信的協(xié)議。WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。

使用

? 安全的WebSocket連接機制和HTTPS類似。首先,瀏覽器用wss://xxx創(chuàng)建WebSocket連接時,會先通過HTTPS創(chuàng)建安全的連接,然后,該HTTPS連接升級為WebSocket連接,底層通信走的仍然是安全的SSL/TLS協(xié)議。

瀏覽器: 很顯然,要支持WebSocket通信,瀏覽器得支持這個協(xié)議,這樣才能發(fā)出ws://xxx的請求。目前,支持WebSocket的主流瀏覽器如下:

  • Chrome
  • Firefox
  • IE >= 10
  • Sarafi >= 6
  • Android >= 4.4
  • iOS >= 8

服務(wù)器: 由于WebSocket是一個協(xié)議,服務(wù)器具體怎么實現(xiàn),取決于所用編程語言和框架本身。Node.js本身支持的協(xié)議包括TCP協(xié)議和HTTP協(xié)議,要支持WebSocket協(xié)議,需要對Node.js提供的HTTPServer做額外的開發(fā)。已經(jīng)有若干基于Node.js的穩(wěn)定可靠的WebSocket實現(xiàn),我們直接用npm安裝使用即可。

適用場景

? 社交聊天、多玩家游戲、協(xié)同編輯/編程、股票基金實時報價、體育實況更新、視頻會議/聊天、基于位置的應(yīng)用、在線教育、智能家居

安全性

WebSocket應(yīng)用安全問題分析

其他

從零理解WebSocket的通信原理、協(xié)議格式、安全性

SSE(Server-sent Events)]

定義

所謂SSE(Sever-Sent Event),就是瀏覽器向服務(wù)器發(fā)送一個HTTP請求,保持長連接,服務(wù)器不斷單向地向瀏覽器推送“信息”(message),這么做是為了節(jié)約網(wǎng)絡(luò)資源,不用一直發(fā)請求,建立新連接。sse是單向的,只能由服務(wù)端往客戶端發(fā)。

它和WebSocket的區(qū)別:

  • 便利,不需要添加任何新組件,用任何習(xí)慣的后端語言和框架就能繼續(xù)使用,不用為新建虛擬機弄一個新的IP或新的端口號而勞神。
  • 服務(wù)器端的簡潔。因為SSE能在現(xiàn)有的HTTP/HTTPS協(xié)議上運作,所以它能夠直接運行于現(xiàn)有的代理服務(wù)器和認(rèn)證技術(shù)。
  • 單向連接。只能單工通信,建立連接后,只能由服務(wù)端發(fā)往客戶端,且占用一個連接,如需客戶端向服務(wù)端通信,需額外打開一個連接。

WebSocket相較SSE最大的優(yōu)勢在于它是雙向交流的,這意味著服務(wù)器發(fā)送數(shù)據(jù)就像從服務(wù)器接受數(shù)據(jù)一樣簡單,而SSE一般通過一個獨立的Ajax請求從客戶端向服務(wù)端傳送數(shù)據(jù),因此相對于WebSocket使用Ajax會增加開銷。因此,如果需要以每秒一次或者更快的頻率向服務(wù)端傳輸數(shù)據(jù),就應(yīng)該用WebSocket。

使用

SSE并沒有在微軟的IE和Edge瀏覽器上實現(xiàn),但可引入第三方庫實現(xiàn)。

瀏覽器兼容性:Firefox 6.0+、Chrome 6.0+、Safari 5.0+、Opera 11.0+、iOS Safari 4.0+、Opera Mobile 11.1+、Chrome for Android 25.0+、Firefox for Android 19.0+ 以及 Blackberry Browser 7.0+ 等。

sse服務(wù)端和瀏覽器使用

適用場景

簡單來說,SSE適用于更新頻繁、低延遲并且數(shù)據(jù)都是從服務(wù)端到客戶端。

  • 實時更新數(shù)據(jù):比如網(wǎng)頁上股票價格的更新,假設(shè)每秒鐘要更新一次,如果用輪詢的方法那我們每秒鐘就要發(fā)送一次http請求,而用SSE,客戶端發(fā)了一次請求以后,服務(wù)器就不斷推送消息,客戶端只需接收就可以了。

  • 新消息推送:比如有新的通知、新的訂單就能第一時間推送給客戶端。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Socket并非是一個協(xié)議,而是為了方便使用TCP而抽象出來的一層,是位于應(yīng)用層和傳輸控制層之間的一組接口。換句話...
    JunChow520閱讀 3,528評論 0 4
  • 1. 前言 Web端即時通訊技術(shù)因受限于瀏覽器的設(shè)計限制,一直以來實現(xiàn)起來并不容易,主流的Web端即時通訊方案大致...
    零一間閱讀 874評論 0 2
  • 因為減肥 喜歡的花生也只好忍痛割愛 慢慢地 竟然也習(xí)慣了 沒有想象得那么難以割舍 有點解脫又有點悵然 沒有什么不可...
    茶潤人生閱讀 243評論 0 1
  • 我時常在想 垃圾桶里的垃圾滿了不倒 溢出在地上 和沒有垃圾桶有什么區(qū)別 垃圾隨手扔在地上 那些垃圾桶買回來又有什么作用
    慕星讀者OR獨者閱讀 193評論 0 1
  • 有一種友誼不低于愛情; 關(guān)系不屬于暖昧; 傾訴一直推心置腹; 結(jié)局總是難成眷屬; 這就是知己! ????
    妍悠悠閱讀 291評論 0 3

友情鏈接更多精彩內(nèi)容