在卸载之前等待 HTTP 请求响应

时间:2021-05-09 10:54:32

标签: express http session onbeforeunload

我正在向我的服务器提交有关用户会话的分析类型数据,并且我是在 beforeunload 浏览器事件期间执行此操作。这一直工作正常,直到我在我的网站上使用 puppeteer 机器人,它实际上开始中止请求。我知道这一点是因为我正在捕获 puppeteer 的 failedrequest 事件并且可以看到我的特定请求正在中止。我认为这与 puppeteer 的实例有关,但我不确定,也不是问题的一部分。

在尝试返回 fetch 承诺并尝试使用同步 XMLHttpRequest 后,我发现我唯一真正的选择是使用 navigator.sendBeacon。现在的问题是我的信标到达服务器太晚了 - 我在获得有关它的所有信息之前正在处理用户的会话。就机器人而言,我正在处理有关会话的零信息,纯粹是因为机器人运行得如此之快。

我有三个问题:

  1. 有没有一种方法可以确保在客户端卸载页面之前发送和处理我的信标?
  2. 有没有办法确保我的信标在服务器处理来自该特定客户端的任何其他请求之前被接收和处理?
  3. 在以上两个问题(以及您的答案)中,哪种方法最适合处理这种情况?

(对于上下文,Web 服务器在 Node 上运行,使用 express,并使用 client-session 进行会话处理。)

0 个答案:

没有答案