Cache-Control:控制缓存的行为
请求指令
- no-cache
防止使用过期的资源,强制服务端进行缓存确认。
如果服务端返回该字段,则缓存服务器不能对资源进行缓存,且当该字段有具体的参数时,客户端也不能使用缓存了。(不缓存过期的资源) - no-store
请求或者响应中有机密信息、客户端和服务端均不能缓存。(真正不进行缓存) - max-age= [秒]
- max-stale = [秒]
指定缓存资源过期时间,如果资源过期时间处于max-stale指定的范围内,则客户端会接收响应。如果未指定具体数值,则无论过期多久,客户端都会接收。 - min-fresh = [秒]
要求缓存服务器返回未过指定时间的缓存资源。如果min-fresh = 60,则过了60秒后的资源就不能返回了。 - no-transform
无论该指令是在请求还是响应中,缓存都不能改变实体主题的媒体类型。 - only-if-cached
指定客户端只在缓存服务器本地缓存请求资源的情况下,才会要求其返回。要求缓存服务器不重新确认资源有效性。
如果发生请求缓存服务器本地缓存无响应,则返回504 Gateway Timeout - cache-extension (token)
扩展新指令
token [ “=” ( token | quoted-string ) ]
Cache-Control: private, community=“UCI”
community就是扩展的新指令,但是只有对能理解新指令的缓存服务器有效,否则会直接忽略。
响应指令
- public
所有用户都可使用缓存 - private
指定用户可以使用缓存 - no-cache
- no-store
- no-transform
- must-revalidate
使用该指令时,代理会向源服务器验证资源有效性。
如果代理无法联通源服务器确认资源有效性,则会返回504 Gateway Timeout。
使用该指令时,会忽略请求指令max-stale,添加在请求首部的max-stale会失效。 - proxy-revalidate
要求缓存服务器如果接收到客户端带有该指令的请求返回前,必选向源服务器确认资源有效性。 - max-age = [秒]
如果客户端下发该字段,则服务器缓存时间如果小于该值(缓存过期时间),则返回给客户端缓存的资源。如果 max-age = 0,则缓存服务器需要讲请求转发到源服务器。
如果服务端返回该字段,缓存服务器不会再对资源有效性进行确认,代表资源缓存的最长时间。
HTTP1.1会优先响应该指令,忽略掉Expires。HTTP1.0则相反。 - s-maxage = [秒]
功能和max-age类型,但是s-maxage只适用于供多个用户适用的公共缓存服务器(一般指代理)。对于向同一用户重复返回响应的服务器来说,该字段是无效的。
使用该字段时,会忽略对Expires首部字段和max-age指令的处理。 - cache-extension