HTTP 缓存

HTTP之缓存

web缓存位于服务器与客户端之间,会根据请求保存资源的副本以便下一次请求使用,而不是再次请求资源

关键词说明

  • Cache-Control
方法 描述
no-cache 不读取缓存文件,向web服务器索取文件(注:触发比较流程,下)
no-store 完全禁止缓存
max-age 当前设定的时间内,缓存有效(单位:秒)
  • last-modified

    包含在Response中,由服务端返回的记录页面最后修改时间

  • If-Modified-Since

    包含在Request中,由客户端发送的记录页面最后修改时间,来自last-modified

  • etag

    包含在Response中,服务端下发的文件修改唯一标识符,通常由修改时间而来

  • If-None-Match

    包含在Request中,客户端发送的文件修改唯一标识符,来自etag

流程

  • 流程图

    Created with Raphaël 2.1.2 客户端 客户端 服务端 服务端 第一次请求 无需校验,返回数据与文件 返回Code 200,返回last-modified与etag 存储last-modified与etag 下一次请求,包含If-Modified-Since于If-None-Match(来自last-modified, etag) 服务端对比两者,数值相同,返回Code 304 服务端对比两者,数值不同,数据与文件有改动,返回Code 200, 同1

注意点

在笔者的尝试中,HTML页面可以很好的响应文件的改动,即文件改动后,last-modified与etag会随之改变,保证页面是最新的;但是除此以外的资源文件,例如CSS、JS文件并不会响应文件的改动。

  • 所有的资源请求(HTML、CSS、JS等)带上参数(?后跟的数据)以后,参数的不同会导致本身的资源的请求是不同的。所以为了保证文件是最近的,可以给HTML的请求带上时间戳的参数保证最新,其他资源文件可以MD5化文件名或者同HTML带上时间戳参数

Application Cache

  • 当通过Application Cache设定文件为CACHE时,所有的资源请求都不会带Cache-Control,浏览器默认直接使用缓存文件

你可能感兴趣的:(Web)