上图是缓存标识正常有效的时序图,但其实协商缓存的验证结果也存在两种情况: 标识有效 标识过期 协商缓存需要配合强缓存使用,使用协商缓存需要先设置 Cache-Control:no-cache 或者 pragma:no-cache 来告诉浏览器不走强缓存。 标识过期 image-20210809211805478 属性 对于协商缓存来说,缓存标识的传递是我们着重需要理解的,...
客户端检查资源超过有效期、强缓存命中失败的情况下,则发出请求“询问”服务器是否资源真的过期了,询问的同时在请求头要携带着资源的「上次更新时间」或者「唯一实体标识」(不同http版本导致的共存问题)。 服务端核对客户端要请求的资源的「上次更新时间」或者「唯一实体标识」: 若一致,说明命中协商缓存,只返回304; ...
这就是强缓存。 实现强缓存 如何去实现强缓存是十分简单的,我们只需要在后端的响应头当中添加一个字段'Cache-control': 'max-age=86400',缓存为一天时间: const http = require('http'); const url = require('url'); const path = require('path'); const fs = require('fs'); const mime = ...
上面提到的强缓存都是由本地浏览器在确定是否使用缓存,当浏览器没有命中强缓存时就会向浏览器发送请求,验证协商缓存是否命中,如果缓存命中则返回304状态码,否则返回新的资源数据。 协商缓存(也叫对比缓存)是由服务器来确定资源是否可用,这将涉及到两组字段成对出现的,在浏览器第一次发出请求时会服务器返回的响应会...
强缓存除了使用Cache-Control实现之外,还可以使用Expires字段,Expires是Http1.0规范,Cache-Control是Http1.1规范,Expires返回一个具体的时间值(如下图所示),代表缓存的有效期,在该日期内浏览器不会向服务器发起请求,而是直接从缓存里获取资源。 因为Expires参照的是本地客户端的时间,而客户端的时间是可以被修改的,所以...
cache-control是http1.1的头字段,expires是http1.0的头字段,如果expires和cache-control同时存在,cache-control会覆盖expires,建议两个都写。 协商缓存: Last-Modifed/If-Modified-Since和Etag/If-None-Match是分别成对出现的,呈一一对应关系 Etag/If-None-Match: ...
**浏览器缓存分类** 浏览器缓存分为强制缓存和协商缓存,浏览器加载一个页面的简单流程如下: 1. 浏览器先根据这个资源的http头信息来判断是否命中强缓存。如果命中则直接加在缓存中的资源,并不会将请求发送到服务器。(强缓存) 2. 如果未命中强缓存,则浏览器会将资源加载请求发送到服务器。服务器来判断浏览器本...
简介:HTTP 缓存技术 - 协商缓存 缓存生效的情况下,浏览器会返回304状态码。协商缓存是在强制缓存失效之后,需要重新对比缓存,由服务器决定是否失效的一种机制。 304:请求的资源没有改变,但是被重定向到已缓冲的文件,所以也叫做缓存重定向,这个子弹主要是用于缓存处理。
缓存 在HTTP 的使用中,我们经常会遇到两种缓存,强制缓存和协商缓存,接下来举两个场景来说明。 强制缓存 举个例子: 公司用版本号管理某个对外提供的 JS 文件。比如说 libgo.1.2.3.js,就是 libgo 的 1.2.3 版本。其中 1 是主版本,2 是副版本,3 是补丁编号。每次你们有任何改动,都会更新 libgo 版本号。在...
HTTP缓存 HTTP Cache是我们开发中接触最多的缓存, 它分为强缓存和协商缓存 强缓存: 直接从本地副本对比获取, 不去请求服务器, 返回的状态码是200 协商缓存: 会去服务器对比, 若没改变才直接读取本地缓存, 返回的状态码是304 (一)、强缓存 ...