HTTP/2 的 服务器推送和 WebSocket 的区别

117 阅读2分钟

📦 场景设定

假设你打开了一个在线聊天应用


✅ 使用 HTTP/2 Server Push 的情况:

当你打开聊天网页时,HTTP/2 可以让服务器自动推送一些静态资源(比如 HTML、CSS、JS 文件)到你的浏览器,不需要浏览器一个一个去请求。

举个例子:

你请求了 chat.html,服务器知道这个页面还需要 style.cssapp.js,于是服务器就一并推送给你。

服务器说:“你既然要这个页面,那我顺便把你等下肯定会要的样式表和脚本也给你推了。”

HTTP/2 的推送只能用于这类静态资源。如果后面有新消息到达,服务器没法主动推送这些聊天内容——它只能等你发起请求。


✅ 使用 WebSocket 的情况:

WebSocket 是一个真正的 双向通信协议。一旦连接建立,服务器和客户端就可以随时互相发送数据

举个例子:

你在聊天室里坐着,突然服务器收到一个新消息(比如其他人发的“Hello!”),它就能立即推给你,而不需要你发起请求。

服务器说:“嘿,你有新消息啦!马上送给你!”


🧠 核心区别总结:

功能HTTP/2 Server PushWebSocket
推送对象静态资源(CSS/JS)任意信息(比如聊天消息)
主动推送仅在初次请求时、针对关联资源任何时刻都可以
持久连接否(一次性推送)是(持续通信)
实时性不支持真正的实时数据推送支持高频、实时交互

🎯 总结一句话:

HTTP/2 Server Push 像是你点菜时服务员顺便给你带来调料;而 WebSocket 则像是你和厨房之间装了个对讲机,随时能互相通话。