服务器驱动的 HTTP 允许服务器发送信息,而无需客户端针对每次更新都发起新的请求。Server-Sent Events(SSE)是一种简单且标准化的单向服务器到浏览器更新方案。
Server-Sent Events #
SSE 客户端会发送一个带有 Accept: text/event-stream 标头的普通 GET 请求。服务器返回 200 OK 和
Content-Type: text/event-stream,并在持续发送由空行分隔的 UTF-8 事件字段时保持响应处于打开状态:
text
event: order-updated
id: 42
data: {"status":"paid"}在浏览器中,EventSource 会自动重新连接。服务器可以发送 retry: 来建议重新连接延迟;如果浏览器收到过事件 ID,则会在重新连接后发送 Last-Event-ID。设计流时,应确保客户端可以从该 ID 继续接收事件,或安全地刷新快照。
SSE 是单向的:客户端使用普通 HTTP 请求执行命令。需要双向低延迟消息传递时,应使用 WebSocket。当代理可能关闭空闲连接时,定期发送 : keepalive 等注释,刷新每个事件,并配置反向代理不要缓冲响应。
应像保护其他端点一样谨慎地验证初始请求。原生 EventSource 无法附加任意授权标头,因此,与其将 bearer 凭据放入 URL,通常更适合使用同站点的安全 Cookie 会话。应对每个订阅强制执行授权;在应用程序要求的情况下,会话撤销后应关闭流。
评论
在 GitHub 上阅读或评论(发表评论需要登录)