img

Last-Modified

浏览器第一次请求,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记(HttpResponse Header):此文件在服务器端最后被修改的时间,格式:Last-Modified:Tue, 24 Feb 2017 08:01:04 GMT

客户端第二次请求该URL时,浏览器会向服务器传送If-Modified-Since报头(HttpRequest Header),询问该时间之后文件是否有被修改过。格式:If-Modified-Since:Tue, 24 Feb 2017 08:01:04 GMT.如果服务器端的资源没有变化,则自动返回304,内容为空。当服务器端代码发生变化或者重启服务器时,则重新发出资源,返回和第一次请求时类似。

Etag

Etag为“被请求变量的实体标记”。即服务器响应时给请求URL标记。并在响应头中将其传送到客户端,格式:Etag:"5d8c72a5edda8d6a:3239"

客户端查询更新的格式是:If-None-Match:"5d8c72a5edda8d6a:3239",若Etag没变,则返回304

Expires

Expires:过期时间。需和Last-Modified结合使用,用于控制请求文件的有效时间。格式:Expires:Thu, 02 Apr 2017 05:14:08 GMT 。过了这个时间,缓存器就会向源服务器发送请求,检查文档是否被修改。

Cache-Control

General Header

可缓存性

  • public

    表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。

  • private

    表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。

  • no-cache

    强制所有缓存了该响应的缓存用户,在使用已存储的缓存数据前,发送带验证器的请求到原始服务器

  • only-if-cached

    表明如果缓存存在,只使用缓存,无论原始服务器数据是否有更新。

到期

  • max-age=<seconds>

    设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。

重新验证

  • must-revalidate

    缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源

其他

  • no-cache

    不管是请求还是响应,缓存都不应存储任何内容

禁止缓存 :

Cache-Control: no-cache, no-store, must-revalidate

缓存静态资源 :

Cache-Control:public, max-age=31536000

Expires 和 Cache-Control比较

Expires = 格林威治时间,HTTP 1.0 版本,缓存的过期时间,允许客户端在这个时间之前不去检查(发请求)

max-age = 秒,HTTP 1.1版本,指资源在本地缓存多少秒

如果max-ageExpires同时存在,则被Cache-Controlmax-age覆盖