html访问图片资源403问题(http referrer)
前言
- 之前碰到一个问题,就是html中通过img标签引入一个图片地址,报403。但是这个图片地址直接复制出来在地址栏打开,却是看得到的。  
- 先说下解决方法: 在HTML代码的head中添加一句<meta name="referrer" content="no-referrer" />即可,后面再说下原理。
http请求中的referrer
- http请求体的header中有一个referrer字段,用来表示发起http请求的源地址信息,这个referrer信息是可以省略但是不可修改的,就是说你只能设置是否带上这个referrer信息,不能定制referrer里面的值。 
- 服务器端在拿到这个referrer值后就可以进行相关的处理,比如图片资源,可以通过referrer值判断请求是否来自本站,若不是则返回403或者重定向返回其他信息,从而实现图片的防盗链。上面出现403就是因为,请求的是别人服务器上的资源,但把自己的referrer信息带过去了,被对方服务器拦截返回了403。 
- 在前端可以通过meta来设置referrer policy(来源策略),具体可以设置哪些值以及对应的结果参考这里。所以针对上面的403情况的解决方法,就是把referrer设置成 - no-referrer,这样发送请求不会带上referrer信息,对方服务器也就无法拦截了。 隐藏referrer信息后,图片资源可以正常访问 隐藏referrer信息后,图片资源可以正常访问
- 浏览器中referrer默认的值是 - no-referrer-when-downgrade,就是除了降级请求的情况以外都会带上referrer信息。降级请求是指https协议的地址去请求http协议,所以上面403的情况还有另一种解决方法就是,请求的图片地址换成http协议,自己的地址使用http协议,这样降级请求也不会带上referrer。
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)时会带上这个参数,他用来表示发起请求的服务器地址,这个参数是必定会传的,然后服务器端用此字段来判断是否允许跨域。
作者:ITgecko
链接:https://www.jianshu.com/p/56df73d0d128
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
html访问图片资源403问题(http referrer)的更多相关文章
- nginx 访问目录403
		centos7.2默认安装好nginx后,会在/usr/share/nginx/html下作为主目录 但是如果想访问下面的目录会发现没有权限,返回403错误 这时候要注意在/etc/nginx/ngi ... 
- 启动 apache2.4  出现  invalid command order 问题  【由于 PHP 访问权限 403 问题引起】
		由于网站出现 403 禁止访问,所以修改了 httpd.conf 文件的权限如下 <Directory /> Options FollowSymLinks AllowOverride N ... 
- ASP.NET MVC4中的bundles特性引发服务器拒绝访问(403错误)
		在ASP.NET MVC4中微软引入了bundles特性,这个特性可以将服务器端的多个Javascript或多个css文件捆绑在一起作为一个单一的URL地址供客户端浏览器调用,从而减少了页面上Http ... 
- nginx静态资源文件无法访问,403 forbidden错误
		在安装 nginx 服务器后,我想把网站的根目录设置为 /root/www/ ,于是对 nginx 的 nginx.conf 文件进行配置 先打开 nginx.conf #user nobody; w ... 
- WampServer 2.5设置外网访问/局域网手机访问(403 Forbidden错误解决方法)
		安装好wamp后,想用手机通过局域访问电脑上wamp下的网页,结果出现如下提示. (403 Forbidden)错误 1.打开http.conf文件 2.找到下图中红色方框中的onlineofflin ... 
- apache 访问出现403 Forbidden
		在linux虚拟机的apache上新增一个虚拟目录/var/wordpress,想把理论网挂上去. 在配置文件httpd.conf中,把”Include conf/extra/httpd-vhosts ... 
- Nginx internal 指令限制访问图片资源文件
		Nginx 的 internal 指令可以用来限制 Web 公共目录下的图片等资源文件被任意用户直接访问.一个明显的使用场景是,对于用户上传的认证图片,属于个人隐私资源,不应该让所有用户都能访问得到, ... 
- nginx1.15.10配置使用非https访问返回403
		nginx版本号:nginx version: nginx/1.15.10 server { listen 443 default ssl; server_name app.test.com; if ... 
- Django项目报错: 禁止访问(403),CSRF验证失败,相应中断
		如果想要取消表单的CSRF防护,可以在模板上删除{% csrf_token %}, 并且在相应的视图函数中添加装饰器@csrf_exempt, 代码如下: from django.views.deco ... 
随机推荐
- c# 使用泛型集合List<T>
- 【HICP Gauss】数据库 升级迁移维护-2
			DM-Data Manager 集群管理web工具 数据库升级 1.检查版本 依次升级.升级前全备数据 2.磁盘空间不小于表预留空间 3. 确保数据库对包有一定权限 4.升级后正常启停 python ... 
- 常见的监控JVM的几个Linux命令和使用
			jps [root@xxx bin]# jps -l 2007bash: jps: command not found [root@xxx bin]# /opt/jdk1.8.0_181/bin/jp ... 
- Problem G: STL——整理唱片(list的使用)
			#include<iostream> #include<list> #include<iterator> #include<algorithm> usi ... 
- python算法与数据结构-选择排序算法(33)
			一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ... 
- 《逆袭团队》第七次作业:团队项目设计完善&编码
			实验十一 团队作业7:团队项目设计完善&编码 内容 项目 软件工程 任课教师博客主页链接 作业链接地址 团队作业7:团队项目设计完善&编码 团队名称 逆袭团队 具体目标 (1)完善团队 ... 
- 「TJOI2018」str
			碱基序列 题目描述 小豆参加了生物实验室.在实验室里,他主要研究蛋白质.他现在研究的蛋白质是由$k$个氨基酸按一定顺序构成的.每一个氨基酸都可能有$a$种碱基序列$s_{i,j}$构成. 现在小豆有一 ... 
- 瀑布流(基于Django)
			# 后端 from django.shortcuts import render, HttpResponse from django.http import JsonResponse from app ... 
- 洛谷 AT2434 JOI 公園 (JOI Park) 题解
			人生第一次AC黑题,我太感动了. 每日一题 day31 打卡 Analysis 先跑遍DJ,求出1到 i的最短路.得到每个点到 1号点的距离后,从小到大排序一遍,这时便可以枚举每个点到 1号点的距离修 ... 
- Greenplum failed segment的恢复方法--primary与mirror都可修复
			当在使用greenplum过程中有不当的操作时,可能会出现segment节点宕掉的情况(比如在greenplum运行的过程中停掉其中几台segment节点的服务器),通过下面的方法可以恢复segmen ... 
 
			
		
