未设置max-age或expires,设置静态内容缓存时间解决
使用百度站长工具中的页面优化建议功能时,会有这样的一项:设置静态内容缓存时间解决——未设置max-age或expires。
“未设置max-age或expires”中的max-age与expires到底是什么呢?该如何解决这个问题呢?本文将详细介绍这部分内容。
expires:指定缓存到期GMT的绝对时间,如果设了max-age,max-age就会覆盖expires。如果expires到期需要重新请求。设expires的目的就是让没有更新的资源不应该产生http请求,如果强制产生请求则返回304,减少服务器压力和降低带宽。exprires属于服务器优化范畴,需要修改服务器配置并重启。所以说,如果使用的是虚拟空间的网站,这点就没办法做到了,具体可以问问空间商是否能解决。如果使用的是VPS或独立服务器,可想办法设置一下。
max-age:是一种页面缓存的方式。网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。
Cache-Control:这个是http 1.1中为了弥补 Expires 缺陷新加入的,现在不支持http 1.1的浏览器已经很少了。
max-age: 指定缓存过期的相对时间秒数,max-ag=0或者是负值,浏览器会在对应的缓存中把Expires设置为1970-01-01 08:00:00 。
s-maxage: 类似于max-age,只用在共享缓存上,比如proxy.
public: 通常情况下需要http身份验证的情况,响应是不可cahce的,加上public可以使它被cache。
no-cache: 强制浏览器在使用cache拷贝之前先提交一个http请求到源服务器进行确认。这对身份验证来说是非常有用的,能比较好的遵守 (可以结合public进行考虑)。它对维持一个资源总是最新的也很有用,与此同时还不完全丧失cache带来的好处),因为它在本地是有拷贝的,但是在用之前都进行了确认,这样http请求并未减少,但可能会减少一个响应体。
no-store: 告诉浏览器在任何情况下都不要进行cache,不在本地保留拷贝。
must-revalidate: 强制浏览器严格遵守你设置的cache规则。
proxy-revalidate: 强制proxy严格遵守你设置的cache规则。
用法举例: Cache-Control: max-age=3600, must-revalidate
cache-control在哪里设置?
在IIS的网站属性中的http头信息选项卡中,勾选启用内容过期后有三个相关选项。所以,这也不是虚拟主机能操作得了的(如果控制面板够强大的话,可能会有设置吧,我是没见过)。
一、立即过期
启用此选项后,每次请求都会向服务器申请下载最新版本。浏览器不做缓存处理。状态返回码200。Cache信息是:no-cache。这种方式可以保证客户端看到的永远是最新版本,也就是说如果服务器端进行了更新,一定能被客户端看到。
二、此时段后过期与过期时间
这两种情况下,浏览器缓存将其作用。注意,第一次的状态是200,同时cache-control为30天(对应的秒数)。就是说这个网页会有30天的缓存。所以,而后的状态都会是304.
综上所述,当你使用百度站长工具优化网站出现:“未设置max-age或expires”问题时,要先看看你的网站用的是虚拟主机还是VPS、云主机等,如果是虚拟主机,就去空间控制面板里看看有没有相关设置;如果是VPS或云主机等,就可以在服务器上直接设置IIS或其他,具体怎么设置,没有实际操作过,不好说。需要根据服务器的环境不同进行不同的设置。