img 标签 访问图片 返回403 forbidden问题,meta标签的说明[通俗易懂]

img 标签 访问图片 返回403 forbidden问题,meta标签的说明

大家好,又见面了,我是全栈君。

1.异常信息 

img 标签 访问图片 返回403 forbidden问题,meta标签的说明[通俗易懂]
2.解决方案

<meta name="referrer" content="no-referrer" /><!--页面头部添加-->

3.meta说明:

<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访问图片资源403问题(http referrer)
前言
之前碰到一个问题,就是html中通过img标签引入一个图片地址,报403。但是这个图片地址直接复制出来在地址栏打开,却是看得到的。img 标签 访问图片 返回403 forbidden问题,meta标签的说明[通俗易懂]

先说下解决方法: 在HTML代码的head中添加一句<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信息,对方服务器也就无法拦截了。

隐藏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)时会带上这个参数,他用来表示发起请求的服务器地址,这个参数是必定会传的,然后服务器端用此字段来判断是否允许跨域。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111965.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用Bootstrap 他写道网站

    使用Bootstrap 他写道网站

    2022年1月4日
    45
  • ffmpeg的安装和使用教程_Anaconda安装ffmpeg

    ffmpeg的安装和使用教程_Anaconda安装ffmpeg一、ffmpeg的简介FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。主要参数-i——设置输入档名。-f——设置输出格式。-y——若输出文件已存在时则覆盖文件。-fs——超过指定的文件大小时则结束转换。-t——指定…

    2022年9月12日
    4
  • Oracle存储过程基本写法[通俗易懂]

    Oracle存储过程基本写法[通俗易懂]oracle存储过程的基本语法1.基本结构 CREATEORREPLACEPROCEDURE存储过程名字(   参数1INNUMBER,   参数2INNUMBER)IS变量1INTEGER:=0;变量2DATE;BEGINEND存储过程名字2.SELECTINTOSTATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有…

    2022年7月17日
    16
  • Navicat Premium 15激活码【2021免费激活】

    (Navicat Premium 15激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlb…

    2022年3月26日
    1.1K
  • Ajax发送请求的四个步骤

    Ajax发送请求的四个步骤<scripttype=”text/javascript”> window.onload=function(){ varbtn=document.getElementById(‘btn’); btn.onclick=function(){ //使用Ajax发送请求需要如下几步 //1、创建XMLHttpRequest(); varxhr=…

    2022年5月17日
    45
  • TransactionScope TransactionAbortedException

    TransactionScope TransactionAbortedException今天在调试代码的时候遇到一个这样的错误:System.Transactions.TransactionAbortedExceptionwascaughtHResult=-2146233087Message=Thetransactionhasaborted.Source=System.Transactions查了一下原因,主要是由于嵌套事务中,底层事务没有关闭,然…

    2022年7月19日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号