Obeta

关于Chrome中请求中canceled状态的看法

canceled并不是一个http请求状态,而是Chrome这类浏览器因为某种原因中断了这个请求.

Chrome canceled状态
Chrome canceled状态

很显然cancel是取消的意思,但是为何浏览器会取消请求呢?原因有以下几种

xhr(ajax)请求超时,chrome 会取消掉这个请求.此时你收到的返回为null.

这是经常会出现的一种情况.

生成请求的的 DOM 节点被删除或者被覆盖,导致请求被 cancel 掉.

Chrome canceled状态
Chrome canceled状态

示例代码:

// 第一步
const ele = document.createElement('img');
// 第二步
ele.src = 'https://cdn.sstatic.net/Img/unified/sprites.svg'; // 粘贴到控制台后chrome会立即去请求这个链接
// 第三步
ele.src = '';

为了完美模拟 cancel,请在 network 面板修改 online 选项为slow 3G.

  1. 执行步骤 1,2 后,chrome 会在下一个事件循环请求这个图片.
  2. 然后再立即执行第三步,你就会发现请求被 cancel 掉了.

而当你 1,2,3 一起执行的时候就能发现浏览器什么都不会做,因为在事件循环之前src就被清空掉了.以上当然不止img,还有iframe等其他具有src属性的标签.

自签名的 https 不受 chrome 信任,某些版本会默默取消请求而不报错(没有遇到过)

请求不正确,chrome 尝试解析 DNS 或其它协议但是有报错导致 cancel 掉.

大致就以上几种情况.

引用

个人随笔记录,内容不保证完全正确,若需要转载,请注明作者和出处.