捋一捋http、https、http2、WebSocket、SSE之間的關係
注:本文不涉及具體的概念,只探究他們之間的關係
- http:目前絕大多數是http1.1版本,最原始的web協議,預設80埠,基於TCP協議。
- https:加密的http協議,預設443埠,基於TCP協議。
- http2:第二代http協議,相較於HTTP1.x,大幅度的提升了web效能。在與HTTP/1.1完全語義相容的基礎上,進一步減少了網路延遲和傳輸的安全性,基於TCP。
- websocket:服務端推送,實現服務端客戶端全雙工通訊,基於TCP。
以上http,websocket都屬於應用層協議,tcp屬於傳輸層協議。
TPC/IP協議是傳輸層協議,主要解決資料如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝資料。
詳情:TCP/IP、Http、Socket的區別實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP程式設計的介面。
HTTP2.0可以說是SPDY的升級版(基於SPDY設計的),但是依然存在一些不同點:
- HTTP2.0支援明文傳輸,而SPDY強制使用HTTPS;
- HTTP2.0訊息頭的壓縮演算法採用HPACK,而非SPDY採用的DEFLATE。
異同:
HTTP協議為單向協議,即瀏覽器只能向伺服器請求資源,伺服器才能將資料傳送給瀏覽器,而伺服器不能主動向瀏覽器傳遞資料。分為長連線和短連線,短連線是每次http請求時都需要三次握手才能傳送自己的請求,每個request對應一個response;長連線是短時間內保持連線,保持TCP不斷開,指的是TCP連線。
而
WebSocket
和SSE
都是HTML5
帶來的新變化~
針對這方面,我覺得這句話總結的很好:
“我們在傳輸資料時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝HTTP文字資訊,然後使用TCP/IP做傳輸層協議將它發到網路上。”
WebSocket
WebSocket是HTML5中的協議,支援持久連線;
首先HTMl5指的是一系列新的API,或者說新規範,新技術。WebSocket是HTML5中新協議、新API;
但是WebSocket是由http先發起的,然後再轉為websocket連線;
總結:
總得來說,在HTML5規範下,最推薦使用ServerSent和WebSocket的方式進行伺服器訊息的推送。
對比這兩種方式:
- ServerSent的方式,可以使服務端的開發依然依用以前的方式,但是其工作方式與Comet類似。
- 而WebSocket的方式,則對服務端的開發有著較高的要求,但其工作方式是完全的推送。
我本人其實挺偏向WebSocket + MQ的工作方式,但是對於老專案的翻新,還是用SeverSent比較好