Skip to content

Latest commit

 

History

History
60 lines (35 loc) · 4.87 KB

CacheHttp.md

File metadata and controls

60 lines (35 loc) · 4.87 KB

对于前端而言,缓存是改善前端性能,提升用户体验等的一个很重要的手段,适当的缓存可以极大的缓解服务器的压力。

永久重定向

重定向是永久的,表示的是原有的 URL 不能再被使用,而应该选择用新的 URL。

编码 含义 处理方法 应用场景
301 Moved Permanently get 方法不会变更,其他方法可能会变更成 get 方法 网站重构
308 Permanently Redirect 方法和消息主体都不发生变化 网站重构,用于非 get 方法

临时重定向

304

http 304 未改变说明无需再次传输请求的内容,也就是可以使用缓存的内容,这通常是在一些安全的方法或者

HTTP 缓存

缓存有很多种,但是对于前端来说 HTTP 缓存无疑是非常重要的一种,是需要优先掌握的

HTTP 缓存分为强缓存和协商缓存,优先级较高的是强缓存,在命中强缓存失败的时候,才会走协商缓存。

强缓存

强缓存是利用 http 头中的 Expires 和 Cache-control 两个字段进行控制的。当请求再次发出的时候,浏览器会根据其中的 expires 和 cache-control 去判断是不是命中了强缓存,如果是命中了,就不再和浏览器发生交互。直接去缓存中获取资源。

在强缓存中有两个关键字,分别是 expires 和 cache-control 。

expires:后面是一个 date 时间日期。表示资源的到期日期,但是这个东西有个问题就是本地的时间可能和服务器不一样,或者可以把本地的时间手动改掉,这样的话就不是我们想要的准确的对比结果了。有一定的局限性。

Cache-control:35000 number 类型,代表的是多少秒。这样的话就可以和服务器很准确的去交互,判断资源是不是过期了。

但是在 cache-control 里不仅仅有 max-age,还有 s-maxage,s-maxage 的优先级高于 max-age

cache-control: max-age=3600, s-maxage=31536000 public private no-cache, no-store,

s-maxage 表示 cache 在代理服务器上的缓存有效时间,且只对 public 缓存生效,对于比较大的架构,一定存在 CDN 这样的静态资源服务器,那么就存在服务器的资源缓存有效时间,那么 s-maxage 就是给这个准备的。这时候会出现 public 和 private 的概念,public 可以被代理服务器缓存也可以被浏览器缓存,但是 private 就只可以被浏览器缓存。

no-cache : 设置了 no-cache 的时候,就会在每次发起请求前,绕开浏览器直接去服务器确认该资源是不是过期,走的是协商缓存的路线。 no-store : 设置了 no-store 的时候,就会是每次请求不使用任何的缓存策略,直接去服务器请求完整的资源。 no-store 的优先级最高。

协商缓存

协商缓存是浏览器和服务器之间协作下的缓存机制,协商缓存机制依赖浏览器和服务器之间的通信,在协商缓存机制下,浏览器会向服务器询问缓存的信息,进而判断是不是要发起请求或者是去本地获取缓存信息。在协商缓存中有两个比较重要的点就是 Last-modify 和 E-tag

Last-modify :通过服务器上文件修改的时间戳和当前请求的时候 HTTP 头信息中携带的 Last-modify 做对比,看是不是一致,如果两者的时间是不一致的,那么就会发起请求。但是这个 Last-modify 有个问题就是他不是很准确,存在这样的情况,当我们修改了文件,但是没有修改文件的内容,这时候,服务器上的文件时间会发生变化,Last-modify 和服务器上的时间不一致,会发起请求,这不是我们想要的,再有就是 Last-modify 时间是秒为单位的,如果在 100ms 内修改了文件,请求的时候,Last-modify 和服务器上的时间是一样的,这时候会拿不到最新的文件。这是弊端 E-tag:E-tag 的出现是为了解决上面提及的那两个弊端,当文件修改了以后,E-tag 就会发生变化,这时候就会触发一次完整的请求。E-tag 虽然好,但是它会消耗服务器的性能,所以 last-modify 和 E-tag 是要根据业务去判断应该用那个。

CDN

一般大型的 web 架构静态资源走 CDN 是一个规定,CDN 的核心功能点有两个,一个是回源,一个是缓存

回源:CDN 服务器发现自己这里没有客户端请求的这个静态资源,就会去找根节点请求这个资源。 缓存:将回源得到的静态资源存放在自己服务器上。

利用 CDN 有很多好处,节省服务器资源,加快静态资源下发给客户端,增强客户体验,让客户可以更快的拿到资源。性能优化等