浏览器并不保证发送一个http request

在网速慢的情况下,离开一个页面时,浏览器并不会保证这个 http request 一定会发送成功

为什么浏览器取消了 http request

简单来讲,浏览器认为没有必要继续跑一个将要消失的页面的进程

怎么办呢

fetch + keepalive

  1. 可以自主定义 request header
  2. 可以发送一个 get
  3. 兼容老版本浏览器(配合fetch补丁) ```javascript etch(“/log”, { method: “POST”, headers: { “Content-Type”: “application/json” }, body: JSON.stringify({ some: “data” }), keepalive: true });
  1. <a name="yhp8T"></a>
  2. ## Navigator.sendBeacon()
  3. 1. 简单不需要定制头部
  4. 1. 更简洁的API
  5. 1. 希望请求不与应用中其他优先级更高的http request竞争
  6. ```javascript
  7. const blob = new Blob([JSON.stringify({ some: "data" })], { type: 'application/json; charset=UTF-8' });
  8. navigator.sendBeacon('/log', blob);