`
fantaxy025025
  • 浏览: 1308866 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

HTTP头的Expires与Cache-control区别

 
阅读更多

HTTP头的Expires与Cache-control区别

http://a18zhizao.com/y2010/1338_http-header-expires-and-cache-control.html

2010年3月24日 a18ccms 发表评论 阅读评论

今天在群里聊天。说道了Expires。这里来说明下这两个的区别吧。
1.概念
# Cache-control 用于控制HTTP缓存(在HTTP/1.0中可能部分没实现,仅仅实现了 Pragma: no-cache)
# Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的效果。但是如果同时存在,则被Cache-Control的max-age覆盖。

 

作用:expire == Cache-Control的max-age

优先级:expire < Cache-Control的max-age

 

2格式
Cache-control: 
数据包中的格式:
Cache-Control: cache-directive

cache-directive可以为以下:

request时用到:

| "no-cache"
| "no-store"
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| "cache-extension"

response时用到:

| "public"
| "private" [ "=" <"> field-name <"> ]
| "no-cache" [ "=" <"> field-name <"> ]
| "no-store"
| "no-transform"
| "must-revalidate"
| "proxy-revalidate"
| "max-age" "=" delta-seconds
| "s-maxage" "=" delta-seconds
| "cache-extension"

部分说明:
根据是否可缓存分为
Public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的
部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换)
根据什么能被缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
根据缓存超时
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

Expires: 
数据包中的格式:
Expires = "Expires" ":" HTTP-date 
例如
Expires: Thu, 01 Dec 1994 16:00:00 GMT (必须是GMT格式)

3.应用
通过HTTP的META设置expires和cache-control

1
2
< meta http-equiv = "Cache-Control" content = "max-age=7200" />
< meta http-equiv = "Expires" content = "Mon, 20 Jul 2009 23:00:00 GMT" />

上述设置仅为举例,实际使用其一即可。这样写的话仅对该网页有效,对网页中的图片或其他请求无效,并不会做任何cache。
这样客户端的请求就多了,尽管只是检查Last-modified状态的东西,但是请求一多对浏览速度必定有影响。

如果要对文件添加cache可以通过apache的mod_expire模块,写法为

1
2
3
4
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 days"
< /IfModule >

记得ExpiresActive设为On,我起先没设置On,似乎怎样YSlow都查不到缓存机制。这样添加的话就是默认所有的。

如果要针对个别MIME类型则可以:
ExpiresByType image/gif "access plus 5 hours 3 minutes" 
见 Apache Module mod_expires 
另外,当点击浏览器上的刷新,客户端发送的请求中均是max-age=0,表示validate操作,发送请求到服务器
要求检查cache,再更新cache,一般得到的是304 Not Modified,表示没变动。

参考:
HTTP RFC2616 HeaderField

 

=

=

=

1

1

1

 

分享到:
评论

相关推荐

    http cache-control详解

    Response.CacheControl = "no-cache" ' 禁止缓存 ``` 以上代码示例展示了如何使用ASP来调整HTTP响应的缓存控制设置。 综上所述,`Cache-Control`和`Expires`字段是HTTP缓存策略的重要组成部分,它们决定了浏览器...

    Cache-control使用Cache-control:private学习笔记

    4. **Expires头与Pragma:no-cache** - `Expires`头用于设定资源的过期时间,如果设置为一个过去的日期,浏览器会认为资源已过期,每次访问都会请求服务器。如果设置为未来的日期,浏览器将在该日期前使用缓存。 ...

    cache-header-control:控制响应缓存头

    缓存头控制 ... // Sets `Cache-Control` header to `public, max-age=600` and `Expires` too // 'minute' -&gt; 10 minutes -&gt; 600 seconds setCacheHeader ( res , 'minute' ) ; next ( ) ; } )

    cache-control-midd:ExpressConnect 中间件设置响应头缓存选项

    var cacheControl = require ( 'cache-control-midd' ) ;var app = express ( ) ;// Sets `Cache-Control` header to `public, max-age=600` and `Expires` too// 'minute' -&gt; 10 minutes -&gt; 600 secondsapp . get ...

    2018最新BAT python面试题.docx

    Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于...

    nginx缓存不起作用问题解决方法

    header主要有如下: 代码如下:Cache-control:no-cache、no-store如果出现这两值,nginx缓存服务器是绝对不会缓存的 代码如下:Expires:1980-01-01如果出现日期比当前时间早,也不会缓存。 2. 解决不缓存方案 2.1 ...

    response.setHeader问题

    本文将详细解释 response.setHeader 的作用、HTTP 消息报头的分类、 Cache-Control 和 Pragma 报头的使用、Expires 报头的作用,以及在禁用 IE 缓存时的实现方法。 一、HTTP 消息报头的分类 HTTP 消息报头可以分为...

    超文本传输协议_--_HTTP1[1].1(RFC_2616中文版)_下.txt

    Cache-Control 头字段与 Expires 的关系 `Cache-Control` 和 `Expires` 均用于控制缓存的行为。其中 `max-age` 指定了响应可以被缓存的时间长度,单位为秒。如果同时存在 `Cache-Control` 和 `Expires`,则 `Cache...

    apache提示没有设置 max-age or expires解决办法.docx

    Apache服务器的缓存控制是通过HTTP响应头中的Cache-Control字段来实现的,它允许服务器指定客户端如何缓存资源,以提高网页加载速度和减少服务器负载。 `max-age`是一个Cache-Control字段的参数,它告诉浏览器资源...

    HTTP+JS+浏览器缓存技术

    1. 使用 Meta 方法:&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"&gt; &lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"&gt; &lt;META HTTP-EQUIV="expires" CONTENT="0"&gt; 2. 使用 jQuery Ajax 清除...

    页面的缓存与不缓存设置及html页面中meta的作用

    HTTP1.0使用`Pragma`字段,而在HTTP1.1中,`Cache-Control`字段成为了更强大的控制工具。以下是一些关键的HTTP头字段: 1. **Pragma**: 在HTTP1.0中,`Pragma:no-cache`用于指示浏览器不应缓存页面,但这个指令对...

    页面优化黄金规则

    页面性能优化的34条黄金守则 1、尽量减少HTTP请求次数 2、减少DNS查找次数 ...12、为文件头指定Expires或Cache-Control 13、Gzip压缩文件内容 14、配置ETag 15、尽早刷新输出缓冲 16、使用GET来完成AJAX请求

    request的使用.txt

    Cache-Control头域 Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max...

    阿里云oss存储(js端签名直传到oss)

    8. **文件元数据**:上传文件时,可以设置文件的元数据,如Content-Type(文件类型)、Cache-Control(缓存控制)、Expires(过期时间)等,这些信息会影响文件在OSS中的存储和访问方式。 9. **JSUploadOSSTest文件...

    浏览器之HTTP缓存的那些事

    然而,由于客户端与服务器之间可能存在时间偏差,因此在HTTP1.1中已被Cache-Control取代。 - **示例**:`Expires: Thu, 01 Jan 2024 00:00:00 GMT` 3. **Last-Modified** - **概述**:Last-Modified指示资源最后...

    httpclient cache 4.2

    HttpClient 4.2引入了HTTP缓存机制,遵循HTTP/1.1规范中的缓存控制头(如Cache-Control, Expires, ETag, Last-Modified等)。缓存策略根据服务器返回的响应头动态调整,可以有效减少重复请求,提高性能。 3. 缓存...

    如何防止IE缓存jsp文件.doc

    - `&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt;`:等同于设置了`Cache-Control`响应头。 - `&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt;`:与设置了`Expires`响应头相同。 ### 实现原理及注意事项 1. **...

    前端cache 策略 .zip

    这主要依赖于两个响应头:`Cache-Control` 和 `Expires`。`Cache-Control` 是HTTP/1.1中的标准,具有更高的优先级。例如,`Cache-Control: max-age=3600` 表示资源在1小时内有效。`Expires` 是HTTP/1.0的遗留字段,...

Global site tag (gtag.js) - Google Analytics