HTTP请求beforeunload:sendBeacon vs img.src

问题描述 投票:4回答:1

beforeunload处理程序的上下文中,fetch(keep-alive: true)和设置src标记的img属性之间的功能差异是什么,以及哪些是制作GET请求的首选方法?

背景:

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

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

显然几年前有很多requests用于这样的功能,culminatedrecommendation使用fetch()sendBeacon内部调用的浏览器方法,一些特定的标志设置来解决unload请求问题:

需要对此类请求进行非默认设置的应用程序应使用FETCH API并将keep-alive标志设置为true

fetch(url, {
  method: ..., 
  body: ...,            
  headers: ...,       
  credentials: 'include',
  mode: 'cors',
  keep-alive: true,
})

据我所知,这种类型的调用在功能上等同于Navigator.sendBeacon,关键设置是keep-alive: true

显然HTML <img>标签也根据规范uses keep-alive: true(强调我的):

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

我对这个文档的理解是,通过GET元素的unload属性在img上发出src请求在功能上等同于用fetch()调用keep-alive: truesendBeacon本身在功能上等同于调用sendBeacon(如果GET可以发出https://fetch.spec.whatwg.org/#request-class请求)。

这准确吗?

javascript http browser analytics sendbeacon
1个回答
2
投票

根据keepalive,它是keep-alive,而不是fetch()

除此之外,是的。此功能已添加到sendBeacon(),以淘汰qazxswpoi的需求。

© www.soinside.com 2019 - 2024. All rights reserved.