OSS、CDN、全站加速的理解和区别

前端这点事 2423 0

Q:什么是OSS?

英文名Object Storage System 中文名对象存储,可以简单的理解成就是一个“网盘”,我们可以把自己网站存储的静态文件(主要是html、css、js、jpg等等)扔到上面去(为什么不扔动态文件,因为没有动态环境不能解析),如果你的网站是纯静态文件,那么就可以直接把所有文件托管到OSS上,然后在OSS直接绑定自定义域名,此刻你绑定域名的Buckets其实就已经是一个网站了。


Q:那么为什么要把网站文件放到OSS上呢?直接放在自己服务器上不是更方便吗?

A:其实很简单,为了网站性能更好,因为浏览器访问网站时候,是有并发限制的(具体浏览器的限制可以自己查阅相关资料),也就意味着你请求的次数很多的时候,由于这个限制,会分批处理,就像“分页”数据一样,一次类似10条,处理完了才能进行下一批操作,那如果一个站内容分几部分部署在多个服务器上,绑定多个域名就可以突破这样的限制,同时也降低了网站服务器处理这些请求消耗的性能(包括CPU、带宽等),从而达到网站性能优化的效果。


Q:那么什么是盗链呢?

A:其实就是对于你存到OSS的资源,别人可能也使用你的资源,那这样一来,你就为别人做了“嫁衣”,别人用了你的流量,你却要为他买单。


Q:怎么做防盗链的配置呢?

当下防盗链主要是通过Referer来做的,还有就是OSS鉴权,后者需要后端配置,一般前者就够用了。


Q:那什么是Referer?

简单来说,就是说可以记录使用资源的来源页面或者来源域名(这个很重要),简单问个问题加深下对Referer的理解,如果直接复制url,此时的Referer是什么?

答案是:空

那如果从搜索引擎、友情链接进入页面带的Referer是什么?

这里有两个点需要注意:

访问我们的域名的Referer是搜索引擎的来源页,比如:Referer:https://baidu.com/xxxxxx 但是,从域名访问静态文件时候,get请求带的是Referer则是我们的域名,

其实就是,访问网站获取静态文件的时候,是我们的域名对需要的静态资源发起了get请求,如果没有进入我们网站页面就不会有所谓的静态资源请求的发起,所以Referer是从我们的域名过来,

而不是从baidu来获取资源的,自然就不是带baidu的Referer了,很容易明白吧!


Q:如何配置防盗链?

这种配置会分为两种情景;

1、第一种是站点和资源不在一个服务上,上面有解释这种情况的Referer,所以我们对OSS只做静态资源链接时候,只需要配置禁止空Referer和白名单设置我们的网站域名就可以了。

对于子域也需要使用的可以设置通配符域名。(*.xxx.com)

简单说下为什么要禁止空Referer访问呢?

因为html有个mate标签,<meta name="referrer" content="no-referrer">,浏览器就不会把Referer带到服务端去了,

这样盗用你资源的人就可以用的光明正大了,当然也可以通过curl -e xxx.com url -o 伪造Referer获取资源。

至于设置自己网站域名才能访问的原因,就不用多解释了吧!就是只有自己域名才能使用资源(而自己网站访问则是待了Referer: xxx.com)。


2、第二种是针对OSS上面寄存了html的存储桶或者是浏览器配置了CDN,我们是不能设置 *.xxx.com 和 禁止空Referer的!!!

因为网站对外不管是什么文件,对外都是资源,如果设置了Referer:*.xxx.com,就会导致搜索引擎的访问.html或者首页的时候,因为带了Referer:baidu,和我们配置的Referer冲突,到时访问不了页面,

那么页面自然也就不会发起文件请求了,有人会说我们加上baidu来的其实也是可以的,但是对于那么多的搜索引擎还有不知名的友情链接,你根本没法做到一一配置!

那为什么也不能配置空的Referer呢?

则是因为设置了禁止空Referer访问的话,就会导致复制url分享给其他人的时候,此时是没有空Referer的,都会导致网站首页不能访问,那么首页进不去,自然也不会发起静态资源的请求了!


Q:在之前在使用时遇到过这么一个问题,为什么有的OSS文件是直接打开的,而有的OSS文件是下载下来的?

A:其实也很简单,根据OSS返回文件的Content-Type不一样,如果对于浏览器可识别的文件类型,浏览器则会直接打开,即使是PDF,只要浏览器安装了相关的插件,也是一样可以打的开,那如果Content-Type是application/octet-stream,那么浏览器则会直接去下载这个文件。备注:国内各大OSS提供商,创建buckets时候,会让你选择区域,为马上的CDN叙述埋一点伏笔。


CDN:英文名Content Delivery Network,即内容分发网络,那么和OSS有什么区别呢?之前说到,OSS是分地区的,那么,当你选择一个地区以后,不同地区的用户对该OSS存储的文件访问速度是不一致的,那么CDN就是为了解决这个问题的。一般我们会将自己网站域名CNAME解析到你创建的加速域名上,做好回源配置,告诉cdn节点回源时候要访问的IP和host或者域名,当用户访问我们网站的时候,我们解析的cname会连接到cdn分配给我们的相对用户最近的节点,并把我们预缓存的文件发给用户,当文件不存在时候,会通过回源请求,下载到cdn节点上,再返回给用户,从而达到对待不同地区用户,都可以达到速度很快的效果,这种方式,也只能针对静态文件,比如:html、js、text、jpg等等,后面会介绍怎么解决这种情况。


全站加速:全站加速默认纯动态加速,即所有动静态请求都通过最优路由回源获取资源,可通过配置指定静态文件类型或路径,实现智能区分动静态资源,静态资源缓存在边缘节点上,动态资源使用动态加速,达到最快的加速效果。配上阿里的一张cdn原理图:

标签: CDN

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~