HTTP的场景实践:chrome浏览器+BaiduNews,对于其涉及的请求中的缓存策略展开具体分析
HTTP缓存的基本概念
HTTP缓存是一种机制,使浏览器能够在再次请求资源时,根据一定的策略决定是否从本地缓存获取资源,从而减少对服务器的请求次数。缓存可以存在于浏览器、代理服务器以及服务器之间。
使用开发者工具进行分析
分析选取的是BaiduNews网页版,请求中有三个CSS文件,状态代码均为200,其中两个是来自内存缓存
查看响应头
服务器返回的响应也包含一些头部字段,用于指定资源的缓存策略。常见的响应头部字段包括:
Cache-Control:与请求中的字段类似,指定缓存策略的各种指令,如max-age(最大缓存时间)、no-cache(不使用缓存,每次都向服务器请求验证)、no-store(不存储缓存)等。但在响应中用于指定服务器期望浏览器或代理服务器遵循的缓存策略ETag和Last-Modified:用于标识资源的唯一性,帮助浏览器在后续请求中验证资源是否发生了变化。
分析缓存策略
根据请求和响应中的缓存头部字段,可以判断资源的缓存策略类型:(👆示例中是强缓存)
- 强缓存:通过设置
Cache-Control的max-age或Expires字段,服务器指示浏览器在一段时间内直接使用缓存,无需验证 - 协商缓存:通过设置
ETag和Last-Modified等字段,服务器使用资源的标识进行验证,返回304状态码表示资源未变化
HTTP
304 Not Modified说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如GET或HEAD或在请求中附带了头部信息:If-None-Match或If-Modified-Since。如果是
200OK,响应会带有头部Cache-Control,Content-Location,Date,ETag,Expires和Vary.