HTTP控制缓存的字段主要包括Cache-Control/Pragma,Expires,Last-Modified/Etag。
1、Cache-Control/Pragma
这个HTTP Head字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令,如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP相关的缓存或代理服务器。它可以指定下列可选值: 1、Public:所有内容都将被缓存,在响应头中设置 2、Private:内容只缓存在私有缓存中,在响应头中设置 3、no-cache:所有内容都不会被缓存,在请求头和响应头中设置 4、no-store:所有内容都不会被缓存在缓存或Internet临时文件中,在响应头中设置 5、must-revalidation/proxy-revalidation:如果缓存的内容失效,请求必须发送到服务 器/代理以进行重新验证,在请求头中设置 6、max-age=xxx:缓存的内容将在xxx秒后失效,这个选项只在HTTP1.1中可用,和Last-Modified一起使用时优先级较高,在响应头中设置 Cache-Control请求字段可以被个浏览器很好的支持,而且优先级也比较高,它和其他一些请求字段(如Expires)同时使用时,Cache-Control会覆盖其他字段 Pragma字段的作用和Cache-Control类似,最常用的Pragma:no-cache,他和Cache-cache的作用是一致的。
2、Expires
Expires通常的使用格式是Expires:Sat,25 Feb 2012 12:22:17 GMT,后面跟着一个日期和时间,超过这个时间后,缓存的内容将失效,浏览器在发送请求之前检查这个页面的字段,看该页面是否已经过期了,如果过期,就向服务端重新发起请求。
3、Last-Modified/Etag
Last-Modified字段一般用于表示一个服务器上的资源的最后修改时间,资源可以是静态资源,也可以是动态内容,通过这个最后修改时间可以判断当前请求的资源是否是最新的。 一般服务端会在响应头中返回一个Last-Modified字段,告诉浏览器这个页面的最后修改时间,如Last-Modified:Sat, 25 Feb 2012 12:55:04 GMT
浏览器再次请求时在请求头中增加If-Modified-Since:Sat, 25 Feb 2012 12:55:04 GMT字段,询问当前缓存的页面是否是最新。如果是最新的就返回304,告诉浏览器是最新的,服务器也不会传输最新的数据 Etag字段的作用和LastModified字段作用相同,这个字段的作用是让服务端给每个页面分配一个唯一的编号,然后通过这个编号来区分当前页面是否最新。这种方式比较灵活,但是当后端的服务器有多台时比较难以处理。