内容简介:笔者网站的图片都是上传到第三方网站上的,比如 简书、掘金、七牛云上的,但是最近简书和掘金都开启了具体问题,就是 html 中通过 img 标签引入一个第三方的图片地址,报 403 。但是这个图片地址直接复制出来在地址栏打开,却是看得到的。
笔者网站的图片都是上传到第三方网站上的,比如 简书、掘金、七牛云上的,但是最近简书和掘金都开启了 防盗链 ,防止其他网站访问他们网站上的图片了,导致笔者的网站存在他们网站上的图片全挂了。
具体问题,就是 html 中通过 img 标签引入一个第三方的图片地址,报 403 。
但是这个图片地址直接复制出来在地址栏打开,却是看得到的。
原因
官方输出图片的时候,判断了来源 Referer ,就是从哪个网站访问这个图片,如果是你的网站去加载这个图片,那么 Referer 就是:你的网站地址。
如果我们的网站地址不在官方的白名单内,所以就看不到图片了。
我们做这个跳板的关键:不发送 Referer,也就是没有来源。那么官方那边,就认为是从浏览器直接访问的,所以就能加载正常的图片了。
referrer
在某些情况下,出于一些原因,网站想要控制页面发送给 server 的 referrer 信息的情况下,可以使用这一 referer metadata 参数。
参数
referer 的 metedata 属性可设置 content 属性值为以下集合:
- never
- always
- origin
结果
- 如果 referer-policy 的值为 never:删除 http head 中的 referer;
- 如果 referer-policy 的值为 default:如果当前页面使用的是 https 协议,而正要加载资源使用的是普通的 http 协议,则将 http header 中额 referer 置为空;
- 如果 referer-policy 的值 origin:只发送 origin 部分;
- 如果 referer-policy 的值为 always:不改变 http header 中的 referer 的值;
举例
如果页面中包含了如下 meta 标签,所有从当前页面中发起的请求将不会携带 referer:
<meta name="referrer" content="never"> 复制代码
如果页面中包含了如下 meta 标签,则从当前页面中发起的 http 请求将只携带 origin 部分:
<meta name="referrer" content="origin"> 复制代码
解决方案
初步方案
- 在 标签里加 meta,referrer 的 content 设置为 nerver
<meta name="referrer" content="never"> 复制代码
这样存在第三方网站上的图片,在你的网站上就可以访问了。
但是还有一个问题,就是如果你的网站需要发送你的网站地址的,那上面的的设置就不行了,比如:用到了百度统计。
那上面的设置会导致百度统计的代码加载不了,因为它需要发送 你的网站地址 给百度统计。
既要不发送 你的网站地址,又要发送你的网站地址,那么怎么办呢 ?
最终的解决方案
- 先在 html 上设置 referrer 为 always
<meta id="referrer" name="referrer" content="always" /> 复制代码
这样之后,首屏加载的时候,加载了百度统计的代码了,能正常统计访客数据了。
- 不需要网站地址的时候,再把 referrer 设置为 nerver
加个延时 setTimeout 再把 referrer 的 content 值设置为 nerver 。 或者 在有图片的地方再把 referrer 的 content 值设置为 nerver 。
const referrer = document.getElementById("referrer"); referrer.setAttribute("content", "never") 复制代码
这样就能解决第三方图片防盗链,又能用到百度统计了。
最后
笔者博客首更地址 : github.com/biaochenxuy…
希望:大家不要恶意盗用、滥用第三方的 CDN 资源行为。
比如:掘金 CDN 本是一件公益性质的社区服务,为便大家在自己的技术博客中使用掘金 CDN 的图片,并没有开启防盗链。
但是就是因为某些人恶意盗用、滥用第三方的 CDN 资源,所以掘金社区不得不开启防盗链来减少损失和规避风险 juejin.im/post/5cefb6… 。
参考文章:
欢迎关注公众号: 全栈修炼 ,每周至少更新两篇高质量的文章,为你保驾护航 !
关注公众号并回复 福利 可领取免费学习资料,福利详情请猛戳: 免费资源获取--Python、 Java 、 Linux 、 Go 、node、vue、react、javaScript
以上所述就是小编给大家介绍的《前端解决第三方图片防盗链的办法 - html referrer 访问图片资源 403 问题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 工程大小优化之图片资源
- React Native图片资源使用的优美方案
- js如何阻止图片的其他资源的加载(DOMContentLoaded)
- Nuxt资源文件夹,别名,图片url和css
- 【iOS 开发】将图片、声音等资源文件打包为 Bundle 的方法
- spring boot 自定义规则访问获取内部或者外部静态资源图片
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android和PHP开发最佳实践
黄隽实 / 机械工业出版社华章公司 / 2013-3-20 / 79.00元
本书是国内第一本同时讲述Android客户端开发和PHP服务端开发的经典著作。 本书以一个完整的微博应用项目实例为主线,由浅入深地讲解了Android客户端开发和PHP服务端开发的思路和技巧。从前期的产品设计、架构设计,到客户端和服务端的编码实现,再到性能测试和系统优化,以及最后的打包发布,完整地介绍了移动互联网应用开发的过程。同时,本书也介绍了Android系统中比较有特色的功能,比如Go......一起来看看 《Android和PHP开发最佳实践》 这本书的介绍吧!