深入解析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参数,不仅可以减轻服务器压力,也可以提高客户端的访问速度,使得网络资源的使用变得更加高效。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/300975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-29 14:18
下一篇 2024-12-29 14:19

相关推荐

  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • 深入了解scala-maven-plugin

    一、简介 Scala-maven-plugin 是一个创造和管理 Scala 项目的maven插件,它可以自动生成基本项目结构、依赖配置、Scala文件等。使用它可以使我们专注于代…

    编程 2025-04-25
  • 深入了解LaTeX的脚注(latexfootnote)

    一、基本介绍 LaTeX作为一种排版软件,具有各种各样的功能,其中脚注(footnote)是一个十分重要的功能之一。在LaTeX中,脚注是用命令latexfootnote来实现的。…

    编程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一个程序就是一个模块,而一个模块可以引入另一个模块,这样就形成了包。包就是有多个模块组成的一个大模块,也可以看做是一个文件夹。包可以有效地组织代码和数据…

    编程 2025-04-25
  • 深入理解Python字符串r

    一、r字符串的基本概念 r字符串(raw字符串)是指在Python中,以字母r为前缀的字符串。r字符串中的反斜杠(\)不会被转义,而是被当作普通字符处理,这使得r字符串可以非常方便…

    编程 2025-04-25
  • 深入探讨冯诺依曼原理

    一、原理概述 冯诺依曼原理,又称“存储程序控制原理”,是指计算机的程序和数据都存储在同一个存储器中,并且通过一个统一的总线来传输数据。这个原理的提出,是计算机科学发展中的重大进展,…

    编程 2025-04-25
  • 深入剖析MapStruct未生成实现类问题

    一、MapStruct简介 MapStruct是一个Java bean映射器,它通过注解和代码生成来在Java bean之间转换成本类代码,实现类型安全,简单而不失灵活。 作为一个…

    编程 2025-04-25

发表回复

登录后才能评论