Beacon API - 用于向 Web 服务器发送异步和非阻塞请求

Beacon(信标)API 用于向 Web 服务器发送异步和非阻塞请求。该请求不期望得到响应。与使用 XMLHttpRequestFetch API 发出的请求不同,浏览器保证在页面卸载并运行完成之前启动信标请求。

Beacon API 的主要用例是向服务器发送分析数据,如客户端事件或会话数据。从历史上看,网站都是使用 XMLHttpRequest 来实现的,但在某些情况下(例如,如果页面即将被卸载),浏览器并不能保证会发送这些异步请求。为了解决这个问题,网站采取了各种技术,比如让请求同步,但这些技术影响了网站的响应速度。由于信标请求既是异步的,又能保证发送,所以具有良好的性能和可靠性。

关于此 API 的动机和用法的更多细节,请看 navigator.sendBeacon() 方法的文档。

注意: 此 API 在 Web 工作线程不可用(未通过 WorkerNavigator 公开)。

接口

此 API 定义了单个方法:navigator.sendbeacon()

该方法接受两个参数,即 URL 和请求中要发送的数据。数据参数是可选的,其类型可以是 ArrayBufferViewBlobDOMStringFormData。如果浏览器成功排队发送请求,该方法返回 true;否则,返回 false

规范

规范 状态 备注
Beacon 候选推荐 初始定义

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持3911431 不支持26211.1

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持401421 未知31 未知26211.3

1. 从 Chrome 59 中开始,该方法不能发送类型不在 CORS 安全列表中的 Blob。这是一个临时性的更改,直到找到缓解该问题的方法。有关更多信息,请参见 Chrome bug 720283

2. 从 Opera 46 中开始,该方法不能发送类型不在 CORS 安全列表中的 Blob。这是一个临时性的更改,直到找到缓解该问题的方法。有关更多信息,请参见 Chrome bug 720283

3. 从 Samsung Internet 7.0 中开始,该方法不能发送类型不在 CORS 安全列表中的 Blob。这是一个临时性的更改,直到找到缓解该问题的方法。有关更多信息,请参见 Chrome bug 720283

相关链接