Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous postback Navigator.sendBeacon不使用授权标头_Asynchronous Postback_Sendbeacon - Fatal编程技术网

Asynchronous postback Navigator.sendBeacon不使用授权标头

Asynchronous postback Navigator.sendBeacon不使用授权标头,asynchronous-postback,sendbeacon,Asynchronous Postback,Sendbeacon,最近chrome停止支持页面卸载或beforeunload事件上的synchronos xmlhttprequest 我尝试了这个解决方案,但在最新的chrome版本中似乎不起作用 现在我像这样使用navigator.sendbeacon api let headers = { type: 'application/json; charset=utf-8', 'authorization': `bearer ${token}` } let blob = ne

最近chrome停止支持页面卸载或beforeunload事件上的synchronos xmlhttprequest

我尝试了这个解决方案,但在最新的chrome版本中似乎不起作用

现在我像这样使用navigator.sendbeacon api

let headers = {
       type: 'application/json; charset=utf-8',
       'authorization': `bearer ${token}`
  }
   let blob = new blob([json.stringify({a:"9"})], headers);

    navigator.sendbeacon(uri, blob);
Api正在运行,所以授权似乎不起作用,
除了navigator.sendBeacon,还有其他选择吗?在撰写本文时,没有。Chrome(可能还有其他浏览器)将不允许XHR同步,因为用户的UX不好(如果用户关闭选项卡并发出XHR同步请求,浏览器将挂起)

虽然有一些变通方法,但每种方法都有其缺点

  • 使用新的(和实验性的)
    sendBeacon
    简单地“排队”请求,这保证了即使在页面卸载时也会触发请求。这也不妨碍用户体验。这样做的一些限制是默认情况下无法更改请求头。如果您确实需要添加自定义标题,那么您必须这样做,而且标题也应该是CORS友好的。而且不会在旧浏览器上工作(看看你,IE)
  • Use fetch()
    API+
    keepalive
    标志-但如果请求头在CORS安全列表中,这同样有效。基本上,如果您的
    fetch()
    请求具有某些请求头,那么出于安全原因,可以发出飞行前请求。如果发出这样的飞行前请求,则某些浏览器不允许使用
    fetch()
    +
    keepalive
    。基本上,你需要保持你的请求简单,这样才能工作。例如,这里不能使用
    content-type=application/json
    。一种解决方法是以
    text/plain
    的形式发送数据,并让服务器相应地进行处理。 更多信息可以在这里找到
  • Chrome确实允许临时解决方案,但这将只在2020年10月之前有效。更多信息

  • 在撰写本文时,没有。Chrome(可能是其他浏览器早于晚)将不允许XHR同步,因为用户的UX不好(如果用户关闭选项卡并发出XHR同步请求,浏览器将挂起)

    虽然有一些变通方法,但每种方法都有其缺点

  • 使用新的(和实验性的)
    sendBeacon
    简单地“排队”请求,这保证了即使在页面卸载时也会触发请求。这也不妨碍用户体验。这样做的一些限制是默认情况下无法更改请求头。如果您确实需要添加自定义标题,那么您必须这样做,而且标题也应该是CORS友好的。而且不会在旧浏览器上工作(看看你,IE)
  • Use fetch()
    API+
    keepalive
    标志-但如果请求头在CORS安全列表中,这同样有效。基本上,如果您的
    fetch()
    请求具有某些请求头,那么出于安全原因,可以发出飞行前请求。如果发出这样的飞行前请求,则某些浏览器不允许使用
    fetch()
    +
    keepalive
    。基本上,你需要保持你的请求简单,这样才能工作。例如,这里不能使用
    content-type=application/json
    。一种解决方法是以
    text/plain
    的形式发送数据,并让服务器相应地进行处理。 更多信息可以在这里找到
  • Chrome确实允许临时解决方案,但这将只在2020年10月之前有效。更多信息