场景说明

以前一直使用 github 做自己的图床,不过国外的网站比较卡。

近期换了一下国内的 gitee 使用,不过发现图片都是 403,但是如果打开图片地址,图片是存在的。

其实原理也比较好理解,很多网站为了避免自己成为无情的图床,为别人做嫁衣,都会有这个限制,防止外链盗图。

解决方案

下载到本地

这是一种解决方案,将图片全部下载下来,然后本地存储访问。

不过这样会比较麻烦,导致博客的体积直线上升。

修改 html 配置

推荐一种比较简单的方式。

在HTML代码的head中添加一句

即可,后面再说下原理。

ps: 亲测有效。

http请求中的referrer

http请求体的header中有一个referrer字段,用来表示发起http请求的源地址信息,这个referrer信息是可以省略但是不可修改的,就是说你只能设置是否带上这个referrer信息,不能定制referrer里面的值。

服务器端在拿到这个referrer值后就可以进行相关的处理,比如图片资源,可以通过referrer值判断请求是否来自本站,若不是则返回403或者重定向返回其他信息,从而实现图片的防盗链。

上面出现403就是因为,请求的是别人服务器上的资源,但把自己的referrer信息带过去了,被对方服务器拦截返回了403。

在前端可以通过meta来设置referrer policy(来源策略),具体可以设置哪些值以及对应的结果参考这里。

所以针对上面的403情况的解决方法,就是把referrer设置成no-referrer,这样发送请求不会带上referrer信息,对方服务器也就无法拦截了。

默认配置

浏览器中referrer默认的值是 no-referrer-when-downgrade,就是除了降级请求的情况以外都会带上referrer信息。

降级请求是指https协议的地址去请求http协议,所以上面403的情况还有另一种解决方法就是,请求的图片地址换成http协议,自己的地址使用http协议,这样降级请求也不会带上referrer。

ps: 这个不适合个人的场景,因为我的博客是强制 HTTPS 的。

nginx配置图片防盗链

最后再说一下这种根据referrer拦截,在服务器如何配置。

我自己服务器用的nginx,这里就说下nginx的配置。

首先打开nginx的配置文件: conf/nginx.conf,在server下面添加如下:

location ~* \.(gif|jpg|png|jpeg)$ {

valid_referers none valid.url.com;

if ($invalid_referer) {

return 403;

}

}

首先第一句以文件格式后缀匹配出图片资源路径,然后通过valid_referers添加合法的referer地址,加上none,表示没有传referer也是合法的,最后referer不合法的情况返回403。

如果想跳其他地址或返回其他图片资源可以这样:rewrite xxx.xxx.com/xxx.jpg。

orgin

http头部中还有一个与referrer类似的叫orgin的字段,在发送跨域请求或预检请求(preflight request)时会带上这个参数,他用来表示发起请求的服务器地址,这个参数是必定会传的,然后服务器端用此字段来判断是否允许跨域。

拓展阅读

参考资料

html添加外链图片代码,web 外链图片 403 解决方案(http referrer)相关推荐

  1. 网站翻滚图片代码html,网页滚动图片滚动特效解析

    1.一种常用的无缝滚动代码: 滚动图片代码演示-志文工作室 href="http://image2.sina.com.cn/gm/lineage2/whz/newwh/images/fy/i ...

  2. html加载富文本_vue使用富文本粘贴图片和html访问图片资源的403问题(http referrer) - 暗恋桃埖源

    1.问题描述 在项目中使用富文本编辑器时,粘贴图片之后出现了一个问题,就是该图片通过地址可以打开,但是在富文本编辑器中却无法显示,报错GET https:///pic/d058ccbf6c81800a ...

  3. html背景图片半透明遮罩,BufferedImage在图片添加半透明遮罩层

    利用BufferedImage处理图片时,例如生成海报往添加图片加文字,由于背景图颜色差异不统一,需要加入纯色半透明遮罩层后,再往上面添加文字. 以下代码演示:在图片底部加入一条高度20的半透明遮罩层 ...

  4. CSS3-边框-外轮廓-文本-渐变-WEB字体

    边框-外轮廓-文本-渐变-WEB字体 1 回顾 1.1 基本语法 新增的长度单位: rem.vw.vh.vmax.vmin 新增的颜色设置方式: rgba().hsl().hsla() 1.2 选择器 ...

  5. java web工程中如何添加图片_java web中如何添加图片

    java web中如何添加图片 对于java可视化界面插入背景图片只需要background-image:url(图片路径)就行,而对于web项目中,并非如此 效果如下: 我们就需要在jsp页面中写J ...

  6. 谷歌高质量外链,google英文外链怎么做效果好?

    外链是谷歌排名算法的一个重要影响因素,毫不夸张的说,谷歌是外链算法. 所以,我们会看到国内的外贸团队,会不断寻找外链去发,按照外链的平台类型,我整理出了做Google排名常用的7种外链渠道: 1.GP ...

  7. 如何增加高质量外链,如何获取外链平台

    如何增加高质量外链 高质量外链的特征 1.相关性强,即和你网站主题或者关键字相关的网站链过来的链接: 2.快照快.权重高,快照更新越快.相关关键词的排名越好越多,质量越高: 3.导出外链少,权重再高也 ...

  8. 玉米社:外链、反链、内链、友链的区别与联系详解

    外链.反链.内链.友链的区别与联系详解 1.外链 外链指从站外链向本站点某页面的链接,主要强调站外.我们常说的发外链,即在外部博客.论坛.自媒体等平台发布的带有自身网站链接的软文或者视频内容,但凡是从 ...

  9. 修改表结构添加外键约束,默认外键名

    2019独角兽企业重金招聘Python工程师标准>>> 修改表结构添加外键约束,默认外键名 alter table SUPPLIER_INFO add foreign key (CR ...

最新文章

  1. 这两年:我的数据竞赛之路
  2. 北京师范大学网络教育期末考试计算机,北京师范大学网络教育———《计算机应用基础》第二章同步练习题(4)...
  3. CentOS虚拟机不能联网状况下yum方式从本地安装软件包
  4. 同步类的基础AbstractQueuedSynchronizer(AQS)
  5. apache gobblin mysql_gobblin简单使用
  6. Iview的Tabs定时切换
  7. 2019春Python程序设计测试(20190611--20190611)
  8. iview中position: 'fixed'最顶层z-index
  9. SourceInsight3.5---a valid serial number was not entered问题解决
  10. Sqlite3实现脏读
  11. 文献管理者ReferenceManager开发及使用
  12. 电脑计算机快捷键消失,电脑桌面快捷方式不见了
  13. 数据库学习之(5)详解DBMS
  14. 图片转化为字符画——get!小技巧【美人图,动物照,有趣注释图案】
  15. Android 8.1输入法配置
  16. JavaScript的json和Array及Array数组的使用方法
  17. tensorflow模型ckpt如何查看输入输出节点,以及转uff模型
  18. 轻开B2C电子商务网站(20141231版)发布手册
  19. 论文笔记:WWW 2019 Heterogeneous Graph Attention Network
  20. C#,图像二值化(12)——基于谷底最小值的全局阈值算法(Valley-Minium Thresholding)与源代码

热门文章

  1. Wifi驱动开发-学习笔记(一)
  2. Yarn访问8088端口时提示 Can not find any active RM. Will retry in next 12 seconds.
  3. Plotly.js使用详细介绍(折线图、饼状图、点图、水平条形图、桑基图、树状图、等值线图)
  4. 【Vitis Accel】1 - HLS 简介
  5. 数据治理(二):数据治理功能方面
  6. Windows 下 Quartus 检测不到 USB-Blaster 终极解决办法
  7. C#框架设计之浅谈SOA与钝化模式
  8. 临时抱佛脚版_移动端适配布局_flex+rem+响应式
  9. 如何把pdf拆分成一页一页
  10. sinon.js基础使用教程---单元测试