卸载前的HTTP请求:sendBeacon与img.src

时间:2019-03-29 16:11:01

标签: javascript http browser analytics sendbeacon

beforeunload处理程序的上下文中,fetch(keep-alive: true)和设置src标签的img属性之间的功能区别是什么?发出GET请求的首选方法?

背景:

我想用JavaScript代码在beforeunload处理程序中发送HTTP GET请求。 Navigator.sendBeacon的文档讨论了此用例but

的优点
  

sendBeacon()方法不提供自定义请求方法的功能

显然,几年前有很多requests都具有这种功能,culminated中的recommendation使用fetch(),{ {1}},并设置了一些特定的标志来解决sendBeacon请求问题:

  

需要非默认设置的应用程序应使用unload API,并将keep-alive标志设置为true

FETCH

据我所知,这种呼叫在功能上等效于fetch(url, { method: ..., body: ..., headers: ..., credentials: 'include', mode: 'cors', keep-alive: true, }) ,密钥设置为Navigator.sendBeacon

显然,根据规范(强调我),HTML keep-alive: true标签也是 uses keep-alive: true

  

请求具有关联的keepalive标志...该标志可用于允许请求的生存期超过环境设置对象,例如navigator.sendBeacon和 HTML img元素设置此标志

我对此文档的理解是,通过<img>元素的GET属性在unload上发出img请求在功能上等同于使用{ {1}},在功能上等效于调用src(如果fetch()可以发出keep-alive: true个请求)。

这是准确的吗?

1 个答案:

答案 0 :(得分:1)

根据https://fetch.spec.whatwg.org/#request-class,它是keepalive,而不是keep-alive

除此之外,是的。此功能已添加到fetch()中,以消除对sendBeacon()的需求。