您的位置:

深入解析max-age

一、max-age默认时长

HTTP协议中的缓存控制,主要用于告知客户端如何处理响应的缓存。而max-age字段,则是其中一个最为关键的控制参数,用于指定资源缓存的有效时间。如果没有设置max-age字段,则浏览器会采用默认的缓存策略。


HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Date: Fri, 01 Jan 2021 00:00:00 GMT
Expires: Thu, 31 Dec 2021 23:59:59 GMT
Cache-Control: max-age=3600

在上面的代码中,max-age的值设定为3600秒(1小时),这意味着客户端对这个资源的缓存副本可以在3600秒内被认为是有效的。

二、cookie的max-age

max-age不仅在HTTP协议中扮演着重要的角色,在cookie机制中同样也十分重要。max-age字段指定了cookie在浏览器中的存活时间,单位是秒。


Set-Cookie: username=abc; expires=Sun, 01-Jan-2023 00:00:00 GMT; path=/; domain=.example.com; HttpOnly; SameSite=Lax;Max-Age=3600

上方代码中,max-age的值设定为3600秒(1小时)。这意味着,客户端在接下来1小时之内都可以通过cookie进行登录状态的维持。如果max-age设置为0,则表示立刻删除此cookie。

三、maxage默认值为多少

在HTTP协议中,默认情况下,max-age字段的默认值为-1,这意味着资源不应该被以任何形式缓存。


HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Date: Fri, 01 Jan 2021 00:00:00 GMT
Expires: Thu, 31 Dec 1981 08:52:00 GMT
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache

上面代码中,通过Cache-Control和Pragma的设置,告诉浏览器不对这个资源做任何形式的缓存操作。

四、maxage=0

maxage=0是常见的HTTP响应头选项之一,表示资源已被修改,需要重新获取。此时,浏览器会忽略缓存,并向服务器重新请求资源。


HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Date: Fri, 01 Jan 2021 00:00:00 GMT
Expires: Thu, 31 Dec 2021 23:59:59 GMT
Cache-Control: max-age=3600
ETag: "abcd"

上面的代码中,max-age的值设为3600秒,ETag字段指定了资源内容的版本号。当客户端再次请求该资源时,如果该资源的版本号仍然是"abcd",则客户端可以使用本地缓存。否则,客户端需要向服务器重新请求资源。

五、max-age=-1

max-age字段的默认值为-1,可以通过以下语法在响应头中显式指定此值:


HTTP/1.1 200 OK
Cache-Control: public, max-age=-1

这意味着,资源可以存于浏览器缓存中,但是在使用时,必须与服务器进行重新验证(使用If-None-Match或If-Modified-Since等头字段),确认缓存版本是否仍然有效。

六、max-age与CDN

max-age在CDN中也有着十分重要的作用。CDN一般将缓存的资源存放于CDN服务节点上,再由用户从最靠近其物理位置的节点进行访问。


Cache-Control: public, max-age=604800

对于许多静态资源,如图片、css文件等,max-age的设定应该相对较长,这样CDN在提供服务的时候可以直接将这些静态资源从自己的本地缓存中获取,而不用请求源站。

七、总结

本文深入讲解了max-age的各种用法,从HTTP中的默认设定、cookie中的max-age设置,到各种场景下特定max-age值的取值范围。合理地设置max-age参数,不仅可以减轻服务器压力,也可以提高客户端的访问速度,使得网络资源的使用变得更加高效。