1.异常信息 F12html
2.解决方案前端
<meta name="referrer" content="no-referrer" /><!--页面头部添加-->
3.说明:nginx
<meta charset="utf-8"> <!-- 设置文档字符编码 --> <meta http-equiv="x-ua-compatible" content="ie=edge"><!-- 告诉IE浏览器,IE8/9及之后的版本都会以最高版本IE来渲染页面。 --> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- 指定页面初始缩放比例。--> <!-- 上述3个meta标签须放在head标签最前面;其它head内容放在其后面,如link标签--> <!-- 容许控制加载资源 --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'"> <!-- 尽量早的放在文档 --> <!-- 只适用于下面这个标签的内容 --> <!-- 使用web应用程序的名称(当网站做为一个应用程序的时候)--> <meta name="application-name" content="Application Name"> <!-- 页面的简短描述(限150个字符)--> <!-- 在某些状况下这个描述做为搜索结果中所示的代码片断的一部分。--> <meta name="description" content="A description of the page"> <!-- 控制搜索引擎爬行和索引的行为 --> <meta name="robots" content="index,follow,noodp"><!-- 全部搜索引擎 --> <meta name="googlebot" content="index,follow"><!-- 谷歌 --> <!-- 告诉谷歌搜索框不显示连接 --> <meta name="google" content="nositelinkssearchbox"> <!-- 告诉谷歌不要翻译这个页面 --> <meta name="google" content="notranslate"> <!-- Google网站管理员工具的特定元标记,核实对谷歌搜索控制台全部权 --> <meta name="google-site-verification" content="verification_token"> <!-- 说明用什么软件构建生成的网站,(例如,WordPress,Dreamweaver) --> <meta name="generator" content="program"> <!-- 简短描述你的网站的主题 --> <meta name="subject" content="your website's subject"> <!-- 很短(10个词之内)描述。主要学术论文 --> <meta name="abstract" content=""> <!-- 完整的域名或网址 --> <meta name="url" content="https://example.com/"> <meta name="directory" content="submission"> <!-- 对当前页面一个等级衡量,告诉蜘蛛当前页面在整个网站中的权重究竟是多少。General是通常页面,Mature是比较成熟的页面,Restricted表明受限制的。 --> <meta name="rating" content="General"> <!-- 隐藏发送请求时请求头表示来源的referrer字段。 --> <meta name="referrer" content="no-referrer"> <!-- 禁用自动检测和格式的电话号码 --> <meta name="format-detection" content="telephone=no"> <!-- 经过设置“off”,彻底退出DNS队列 --> <meta http-equiv="x-dns-prefetch-control" content="off"> <!-- 在客户端存储 cookie,web 浏览器的客户端识别--> <meta http-equiv="set-cookie" content="name=value; expires=date; path=url"> <!-- 指定要显示在一个特定框架中的页面 --> <meta http-equiv="Window-Target" content="_value"> <!-- 地理标签 --> <meta name="ICBM" content="latitude, longitude"> <meta name="geo.position" content="latitude;longitude"> <meta name="geo.region" content="country[-state]"><!-- 国家代码 (ISO 3166-1): 强制性, 州代码 (ISO 3166-2): 可选; 如 content="US" / content="US-NY" --> <meta name="geo.placename" content="city/town"><!-- 如 content="New York City" -->
以前碰到一个问题,就是html中经过img标签引入一个图片地址,报403。可是这个图片地址直接复制出来在地址栏打开,倒是看获得的。web
<meta name="referrer" content="no-referrer" />
便可,后面再说下原理。http请求体的header中有一个referrer字段,用来表示发起http请求的源地址信息,这个referrer信息是能够省略可是不可修改的,就是说你只能设置是否带上这个referrer信息,不能定制referrer里面的值。跨域
服务器端在拿到这个referrer值后就能够进行相关的处理,好比图片资源,能够经过referrer值判断请求是否来自本站,若不是则返回403或者重定向返回其余信息,从而实现图片的防盗链。上面出现403就是由于,请求的是别人服务器上的资源,但把本身的referrer信息带过去了,被对方服务器拦截返回了403。浏览器
在前端能够经过meta来设置referrer policy(来源策略),具体能够设置哪些值以及对应的结果参考这里。因此针对上面的403状况的解决方法,就是把referrer设置成no-referrer
,这样发送请求不会带上referrer信息,对方服务器也就没法拦截了。bash
浏览器中referrer默认的值是no-referrer-when-downgrade
,就是除了降级请求的状况之外都会带上referrer信息。降级请求是指https协议的地址去请求http协议,因此上面403的状况还有另外一种解决方法就是,请求的图片地址换成http协议,本身的地址使用http协议,这样降级请求也不会带上referrer。服务器
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
。