http
- http是應用層協議,是基於tcp協議的,所以http建立連接的時候必須要經過三次握手。
- 每一次交換都是客戶端主動發起請求(request),服務端被動應答(response)。
- 服務器不能主動向客戶端推送數據。
- 通信的數據是基於文本格式的。二進制數據(比如圖片等)要轉化爲base64編碼文本後才能傳輸。
長連接和短連接
短連接:是每次請求都要三次握手建立連接才能發送信息,完成一次通信之後就把連接斷開。發送消息過程中一個request對應一個response。
長連接:建立連接了在一段時間內保持連接,tcp不會斷開。客戶端與服務器通信,必須由客戶端發起request,然後服務器返回結果。即客戶端是主動的,服務器是被動的。
websocket
WebSocket是HTML5規範提出的一種協議,它是封裝在socket協議的上層協議。它是爲了解決 客戶端發起多個http請求服務器資源 必須要經過長時間輪詢的問題而產生的,它能實現多路複用。
- websocket建立連接時,數據是通過http傳輸的,建立連接後就不需要http協議了。
- websocket建立連接後就是全雙工模式,也是基於tcp協議。
- 建立連接之後,不必在瀏覽器(客戶端)發送request之後服務器才能發送信息到瀏覽器,這時候服務器有主動權,可以隨時發消息給瀏覽器(客戶端)。
- 發送的信息中不必帶有head部分信息了,相對於http來說,降低了服務器的壓力,極大的減少了不必要的網絡流量與延遲。
websocket與http的關係
- 相同點:
1.都是基於tcp協議,都需要三次握手建立連接,都是可靠傳輸協議
2.都是應用層協議
- 區別:
1.websocket是雙向通信協議,模擬socket協議,而http是單向的。
2.websocket需要瀏覽器(客戶端)和服務器握手進行連接的,而http是瀏覽器發起向服務器的連接,服務器預先並不知道這個連接。
參考:
https://www.cnblogs.com/guoke-jsp/p/5782653.html
https://blog.csdn.net/yamaxifeng_132/article/details/83583497