3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
您似乎假設(shè)WebSocket是HTTP的替代品。它不是。這是一個(gè)擴(kuò)展。
WebSockets的主要用例是Javascript應(yīng)用程序,它們?cè)赪eb瀏覽器中運(yùn)行并從服務(wù)器接收實(shí)時(shí)數(shù)據(jù)。游戲就是一個(gè)很好的例子。
在WebSockets之前,Javascript應(yīng)用程序與服務(wù)器交互的唯一方法是通過(guò)XmlHttpRequest。但這些都有一個(gè)主要的缺點(diǎn):服務(wù)器無(wú)法發(fā)送數(shù)據(jù),除非客戶端已明確請(qǐng)求它。
但新的WebSocket功能允許服務(wù)器隨時(shí)發(fā)送數(shù)據(jù)。這允許實(shí)現(xiàn)具有低得多的延遲的基于瀏覽器的游戲,而不必使用諸如AJAX長(zhǎng)輪詢或?yàn)g覽器插件之類的丑陋黑客。
那么為什么不使用普通的HTTP與流式請(qǐng)求和響應(yīng)
在對(duì)另一個(gè)答案的評(píng)論中,您建議只是異步地流式傳輸客戶端請(qǐng)求和響應(yīng)正文。
實(shí)際上,WebSockets基本上就是這樣。嘗試從客戶端打開(kāi)WebSocket連接首先看起來(lái)像HTTP請(qǐng)求,但標(biāo)題中的特殊指令(Upgrade:websocket)告訴服務(wù)器開(kāi)始以此異步模式進(jìn)行通信。WebSocket協(xié)議的初稿并不僅僅是那些以及確保服務(wù)器實(shí)際理解客戶端想要異步通信的一些握手。但后來(lái)人們意識(shí)到代理服務(wù)器會(huì)被它混淆,因?yàn)樗鼈兞?xí)慣于HTTP的通常請(qǐng)求/響應(yīng)模型。一個(gè)潛在的攻擊場(chǎng)景中對(duì)代理服務(wù)器被發(fā)現(xiàn)。為了防止這種情況,有必要使WebSocket流量看起來(lái)不像任何普通的HTTP流量。這就是為什么要引入屏蔽鍵的原因協(xié)議的最終版本。
添加回答
舉報(bào)