Expires
中如:Mon,10 Dec 1990 02:25:22GMT。那么这个资源在这个时间以前都能使用。那么有一个问题是:客户端的时间是能够被修改的,并且客户端和服务器时间未必一致。Cache-Control:max-age=300
单位是秒(s)。如今好了300秒内这个资源就不会过时。那么有一种多是300秒后我再次去服务器拿这个资源发现资源并无被改变过,服务器又再次返回了一样的资源给我,这样的话就浪费了一次带宽。其实能够返回一条信息给浏览器代表缓存资源能够继续使用。ETag:W/"e-cbxLFQW5zapn79tQwb/g6Q"
。这个ETag是服务器根据资源计算出的惟一标识,一般配合max-age
使用。当时间过时之后浏览器会将标识放在请求头中的If-None-Match
,服务器收到请求之后会拿请求中的标识与服务器根据资源计算的Etag进行比较,若一致则返回响应头其中包含状态码304。不一致就返回新的资源。可是在分布式系统中每一个机器生成的ETag不同。Last-Modified
。当资源过时时浏览器发现资源有Last-Modified
,而后发请求时便在请求头增长了一个字段If-Modified-Since
表示发送的请求时间,服务器拿到这个时间与资源的最后修改时间比较,若是修改时间比较新那么返回新的资源,不然返回Http 304。1.当Expires
与Cache-Control:max-age
同时存在时max-age的优先级高。
2.[Last-Modified,If-Modified-Since]和[ETag、If-None-Match]常常会放在一块儿使用。浏览器