不论是传统的HTTP请求-响应式的通信模式, 还是异步的AJAX式请求, 服务器端始终处于被动的应答状态, 只有在客户端发出请求的情况下, 服务器端才会返回响应。 这种通信模式被称为客户端拉取(client pull) 。 在这种模式下, 用户只能通过刷新页面或主动单击加载按钮来拉取新数据。
然而, 在某些场景下, 我们需要的通信模式是服务器端的主动推送(server push) 。 比如, 一个聊天室有很多个用户, 当某个用户发送消息后, 服务器接收到这个请求, 然后把消息推送给聊天室的所有用户。类似这种关注实时性的情况还有很多, 比如社交网站在导航栏实时显示
新提醒和私信的数量, 用户的在线状态更新, 股价行情监控、 显示商品库存信息、 多人游戏、 文档协作等。
实现服务器端推送的一系列技术被合称为HTTP Server Push(HTTP服务器端推送)
轮询(polling) 这类使用AJAX技术模拟服务器端推送的方法实现起来比较简单, 但通常会造成服务器资源上的浪费, 增加服务器的负担, 而且会让用户的设备耗费更多的电量(频繁地发起异步请求) 。SSE效率更高, 在浏览器的兼容性方面, 除了Windows IE/Edge, SSE基本上支持所有主流浏览器, 但浏览器通常会限制标签页的连接数量。