上周测试同事发现,刷新页面时,第三方图片偶尔出现403拒绝访问。

本人排查,出现此问题的图片 header 头都带了 referer 字段,触发了第三方的防盗链机制。然而,前端同事在动态生成 img 标签时,确认已经增加了 referrerpolicy="same-origin" 属性(即同源才发送 referer 头)。模板如下:

<img :src="item.cover_src" alt referrerpolicy="same-origin" />

本人猜测,vue 在生成标签属性时,是按顺序以一个一个添加的,因 src 属性在前,有些图片加载太快,浏览器还未识别到 referrerpolicy 就已经发出了请求,所以才会带 referer 头。

为验证猜想,将 referrerpolicy 属性放在最前面,模板修改如下:

<img referrerpolicy="same-origin" :src="item.cover_src" alt />

经过调整后,第三方图片403的问题目前没有再出现了。

至于是否为本人猜想,或是巧合,需要前端同事有空去阅读 vue 源代码才知道。另外,浏览器内核是 Chromium 62。