日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理清 WebSocket 和 HTTP 的关系

發布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理清 WebSocket 和 HTTP 的关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近公司內部同事分享了WebSocket相關的一些知識,之前也用過WebSocket做過一個即時通信的應用。基本上但凡提到WebSocket和HTTP的關系都會有以下兩條:

  • WebSocket和HTTP都是基于TCP協議的兩個不同的協議

  • WebSocket依賴于HTTP連接

  • 作為結論性的總結,直接了當,但是我需要更多的實現細節來解釋上述結論。因為都是基于TCP的兩個獨立的協議,WebSocket按理說可以和HTTP沒有關系,所以這里面包含兩個問題:

  • WebSocket依賴于HTTP連接,那么它如何從連接的HTTP協議轉化為WebSocket協議?

  • WebSocket為什么要依賴于HTTP協議的連接?

  • 問題一

    幸運的是,第一個問題的答案很容易找到。

    每個WebSocket連接都始于一個HTTP請求。具體來說,WebSocket協議在第一次握手連接時,通過HTTP協議在傳送WebSocket支持的版本號,協議的字版本號,原始地址,主機地址等等一些列字段給服務器端:

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

    注意,關鍵的地方是,這里面有個Upgrade首部,用來把當前的HTTP請求升級到WebSocket協議,這是HTTP協議本身的內容,是為了擴展支持其他的通訊協議。如果服務器支持新的協議,則必須返回101:

    HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

    至此,HTTP請求物盡其用,如果成功出發onopen事件,否則觸發onerror事件,后面的傳輸則不再依賴HTTP協議。總結一下,這張圖比較貼切:

    WebSocket and HTTP

    ?

    問題二

    經過學習和理解,我認為有兩點:

    第一,WebSocket設計上就是天生為HTTP增強通信(全雙工通信等),所以在HTTP協議連接的基礎上是很自然的一件事,并因此而能獲得HTTP的諸多便利。第二,這諸多便利中有一條很重要,基于HTTP連接將獲得最大的一個兼容支持,比如即使服務器不支持WebSocket也能建立HTTP通信,只不過返回的是onerror而已,這顯然比服務器無響應要好的多。

    最后

    關于WebSocket和HTTP的討論其實網上并不少,但因為一些資料本身就邏輯混亂,往往看的越多可能對于它們的關系越糊涂。理清一下這個簡單的關系對于了解它們的應用場景還是有必要的,這也是我做這個分析的出發點所在。

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的理清 WebSocket 和 HTTP 的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。