列举⼀下 HTTP 中关于 "资源缓存" 的头部指令 (Head) 有哪些 ? 并简要介绍⼀下设置的规则 ?
强制缓存
- Expires 指定?个缓存的过期时间,如果当次请求的资源在该过期时间之前,则命中缓存。缺点是因为这个时间是?个绝对时间,所以当客户端本地时间被修改后,服务器与客户端时间偏差变?会 导致缓存混乱。
- Cache-Control ?般通过 max-age 指定?个相对时间,单位是秒。优先级?于 Expires 。其他常?的取值有:
- public 表示响应可以被任何对象缓存
- private 表示只能被单个?户缓存,?共享的,不能被代理服务器缓存
- no-cache 强制所有缓存了该响应的?户,在使?已缓存的数据钱,发送待验证器的请求到服务器。
- No-store 禁?缓存
协商缓存
若未命中强缓存,则浏览器会将请求发送?服务器。服务器根据http头信息中的Last-Modify/If-ModifySince或Etag/If-None-Match来判断是否命中协商缓存。如果命中,则http返回码为304,浏览器从缓存 中加载资源。
- Last-Modify/If-Modify-Since 浏览器第?次请求?个资源的时候,服务器返回的header中会加上Last-Modify,Last-modify是?个时间标识该资源的最后修改时间,当浏览器再次请求该资源时,发送的请求头中会包含If-Modify-Since,该值为缓存之前返回的Last-Modify。服务器收到IfModify-Since后,根据资源的最后修改时间判断是否命中缓存。
- ETag/If-None-Match ETag可以保证每?个资源是唯?的,资源变化都会导致ETag变化。ETag值的变更则说明资源状态已经被修改。服务器根据浏览器上发送的If-None-Match值来判断是否命中缓存。
作者:Roc
链接:https://juejin.cn/post/6970867290480853006
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。