1.CDN 缓存更方便
http缓存是浏览器端缓存,cdn是服务器端缓存。
举个例子来说明cdn的作用:cdn就是代理。厂家给商家发货,你从商家买货,商家就是cdn,很方便。
CDN怎么缓存呢
和Http类似,客户端请求数据时,先从本地缓存查找,如果被请求数据没有过期,拿过来用,如果过期,就向CDN边缘节点发起请求。CDN便会检测被请求的数据是否过期,如果没有过期,就返回数据给客户端,如果过期,CDN再向源站发送请求获取新数据。和买家买货,卖家没货,卖家再进货一个道理^^。
CDN边缘节点缓存机制,一般都遵守http标准协议,通过http响应头中的Cache-Control和max-age的字段来设置CDN边缘节点的数据缓存时间。
2.突破浏览器并发限制
随着现在的网页设计的越来越炫酷,功能越来越丰富。伴随着的是网页加载的资源越来越多,常常一个页面加载的CSS、JS、图片、接口等超过几十上百个。
但其实,在客户端,浏览器并不一定会对每个资源开个连接去请求加载,是有并发限制的。
这其实是基于多方面因素考量出的优化结果,比如:
- 对客户端操作系统而言,过多的并发涉及到端口数量和线程切换开销。
- HTTP/1.1有Keep Alive,支持复用现有连接,等请求返回回来后,再复用连接请求可以快很多。
- 将所有请求一起发给服务器,也很可能会引发服务器的并发阈值控制而被BAN。
也并不是浏览器限制并发了,我们就没别的办法了。提升页面打开速度的技术有很多,常见的:
- domain hash:对资源做哈希,请求到不同的域下面。
- cookie free:前后端分离,减少不必要的cookie提交。
- css sprite:将零星的图片整合到一张大图中,减少请求次数。
- js/css combine:资源合并,减少请求次数,不过也会增加文件修改的几率。
- max expires time:合理设置客户端缓存时间。
- loading images on demand:图片按需加载。
域名发散与收敛
域名发散:
因为浏览器对同一域名下的最大连接数做了限制,为了让浏览器并发加载,将资源分散到不同域名下,缺点是需要DNS解析更多的域名。
域名收敛:
在移动场景下,为了解决DNS解析耗时问题,将资源汇总到一个或更少的域名下。
3.节约 cookie 带宽
cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的。
第一:每个特定的域名下最多生成20个cookie
优点:极高的扩展性和可用性
1.通过良好的编程,控制保存在cookie
中的session
对象的大小。
2.通过加密和安全传输技术(SSL),减少cookie
被破解的可能性。
3.只在cookie
中存放不敏感数据,即使被盗也不会有重大损失。
4.控制cookie
的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie
。
缺点:
1.Cookie
数量和长度的限制。每个domain
最多只能有20条cookie
,每个cookie
长度不能超过4KB,否则会被截掉。
2.安全性问题。如果cookie
被人拦截了,那人就可以取得所有的session
信息。即使加密也与事无补,因为拦截者并不需要知道cookie
的意义,他只要原样转发cookie
就可以达到目的了。
3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。