Beacon API - 用于向 Web 服务器发送异步和非阻塞请求
Beacon
(信标)API 用于向 Web 服务器发送异步和非阻塞请求。该请求不期望得到响应。与使用 XMLHttpRequest
或 Fetch API 发出的请求不同,浏览器保证在页面卸载并运行完成之前启动信标请求。
Beacon API 的主要用例是向服务器发送分析数据,如客户端事件或会话数据。从历史上看,网站都是使用 XMLHttpRequest
来实现的,但在某些情况下(例如,如果页面即将被卸载),浏览器并不能保证会发送这些异步请求。为了解决这个问题,网站采取了各种技术,比如让请求同步,但这些技术影响了网站的响应速度。由于信标请求既是异步的,又能保证发送,所以具有良好的性能和可靠性。
关于此 API 的动机和用法的更多细节,请看 navigator.sendBeacon()
方法的文档。
注意: 此 API 在 Web 工作线程中不可用(未通过 WorkerNavigator
公开)。
接口
此 API 定义了单个方法:navigator.sendbeacon()
。
该方法接受两个参数,即 URL 和请求中要发送的数据。数据参数是可选的,其类型可以是 ArrayBufferView
,Blob
,DOMString
或 FormData
。如果浏览器成功排队发送请求,该方法返回 true
;否则,返回 false
。
规范
规范 | 状态 | 备注 |
---|---|---|
Beacon | 候选推荐 | 初始定义 |
桌面浏览器兼容性
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 401 | 421 | 未知 | 31 | 未知 | 262 | 11.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。
相关链接
- Beacon 标准
- Beacon CanIUse 数据
- 通过服务工作线程拦截 Beacon; Ehsan Akhgari; 2015-Apr-08
- 链接点击分析和隐私
- Beacon 实战