伺服器驅動的 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。當 Proxy 可能關閉閒置連線時,請定期傳送 : keepalive 等註解、刷新每個事件,並設定反向 Proxy 不要緩衝回應。
初始請求應如同其他端點一樣謹慎地進行驗證。原生 EventSource 無法附加任意授權標頭,因此,相較於將 bearer 憑證放入 URL,使用同一網站的安全 Cookie 工作階段通常更適合。應對每個訂閱強制執行授權;在應用程式有此要求時,工作階段撤銷後應關閉串流。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)