1.概念
Cache-control用于控制HTTP缓存(在HTTP/1.0中可能部分没实现,仅仅实现了Pragma: no-cache)
数据包中的格式:
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 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的
效果。但是如果同时存在,则被Cache-Control的max-age覆盖。
格式:
Expires = "Expires" ":" HTTP-date
例如
Expires: Thu, 01 Dec 1994 16:00:00 GMT (必须是GMT格式)
2.应用
通过HTTP的META设置expires和cache-control
<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模块,写法为
<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"
另外,当点击浏览器上的刷新,客户端发送的请求中均是max-age=0,表示validate操作,发送请求到服务器
要求检查cache,再更新cache,一般得到的是304 Not Modified,表示没变动。
!!具体实例各类操作与Cache-control选项的关系:
网页的缓存是由 HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must- revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:
(1) 打开新窗口
值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。
而如果指 定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不 会去服务器)
(2) 在地址栏回车
值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。
值为no-cache,那么每次都会访问。
值为max-age,则在过期之前不会重复访问。
(3) 按后退按扭
值为private、must-revalidate、max-age,则不会重访问,
值为no-cache,则每次都重复访问
(4) 按刷新按扭
无论为何值,都会重复访问
Cache-control值为“no-cache”时,访问此页面不会 在Internet临时文章夹留下页面备份。
另外,通过指定“Expires”值也会影响到缓存。 例如,指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问: Expires: Fri, 31 Dec 1999 16:00:00 GMT
比如:禁止页面在IE中缓存
http响应消息头 部设置:
CacheControl = no-cache
Pragma=no-cache
Expires = -1
Expires是个好东东,如果服务器上的网页经常变化,就把它设置为-1,表示立即过期。如果一个网页 每天凌晨1点更新,可以把Expires设置为第二天的凌晨1点。
当HTTP1.1服务器指定 CacheControl = no-cache时,浏览器就不会缓存该网页。
<!--EndFragment-->
相关推荐
Response.CacheControl = "no-cache" ' 禁止缓存 ``` 以上代码示例展示了如何使用ASP来调整HTTP响应的缓存控制设置。 综上所述,`Cache-Control`和`Expires`字段是HTTP缓存策略的重要组成部分,它们决定了浏览器...
4. **Expires头与Pragma:no-cache** - `Expires`头用于设定资源的过期时间,如果设置为一个过去的日期,浏览器会认为资源已过期,每次访问都会请求服务器。如果设置为未来的日期,浏览器将在该日期前使用缓存。 ...
缓存头控制 ... // Sets `Cache-Control` header to `public, max-age=600` and `Expires` too // 'minute' -> 10 minutes -> 600 seconds setCacheHeader ( res , 'minute' ) ; next ( ) ; } )
缓存控制中间Express/Connect 中间件设置响应头缓存选项安装 npm install cache-control-midd --save用法 var express = require ( 'express' ) ;var cacheControl = require ( 'cache-control-midd' ) ;var app = ...
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于...
header主要有如下: 代码如下:Cache-control:no-cache、no-store如果出现这两值,nginx缓存服务器是绝对不会缓存的 代码如下:Expires:1980-01-01如果出现日期比当前时间早,也不会缓存。 2. 解决不缓存方案 2.1 ...
本文将详细解释 response.setHeader 的作用、HTTP 消息报头的分类、 Cache-Control 和 Pragma 报头的使用、Expires 报头的作用,以及在禁用 IE 缓存时的实现方法。 一、HTTP 消息报头的分类 HTTP 消息报头可以分为...
Cache-Control 头字段与 Expires 的关系 `Cache-Control` 和 `Expires` 均用于控制缓存的行为。其中 `max-age` 指定了响应可以被缓存的时间长度,单位为秒。如果同时存在 `Cache-Control` 和 `Expires`,则 `Cache...
1. 使用 Meta 方法:<META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="0"> 2. 使用 jQuery Ajax 清除...
Apache服务器的缓存控制是通过HTTP响应头中的Cache-Control字段来实现的,它允许服务器指定客户端如何缓存资源,以提高网页加载速度和减少服务器负载。 `max-age`是一个Cache-Control字段的参数,它告诉浏览器资源...
页面性能优化的34条黄金守则 1、尽量减少HTTP请求次数 2、减少DNS查找次数 ...12、为文件头指定Expires或Cache-Control 13、Gzip压缩文件内容 14、配置ETag 15、尽早刷新输出缓冲 16、使用GET来完成AJAX请求
HTTP1.0使用`Pragma`字段,而在HTTP1.1中,`Cache-Control`字段成为了更强大的控制工具。以下是一些关键的HTTP头字段: 1. **Pragma**: 在HTTP1.0中,`Pragma:no-cache`用于指示浏览器不应缓存页面,但这个指令对...
Cache-Control头域 Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max...
8. **文件元数据**:上传文件时,可以设置文件的元数据,如Content-Type(文件类型)、Cache-Control(缓存控制)、Expires(过期时间)等,这些信息会影响文件在OSS中的存储和访问方式。 9. **JSUploadOSSTest文件...
然而,由于客户端与服务器之间可能存在时间偏差,因此在HTTP1.1中已被Cache-Control取代。 - **示例**:`Expires: Thu, 01 Jan 2024 00:00:00 GMT` 3. **Last-Modified** - **概述**:Last-Modified指示资源最后...
- `<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">`:等同于设置了`Cache-Control`响应头。 - `<META HTTP-EQUIV="Expires" CONTENT="0">`:与设置了`Expires`响应头相同。 ### 实现原理及注意事项 1. **...
HttpClient 4.2引入了HTTP缓存机制,遵循HTTP/1.1规范中的缓存控制头(如Cache-Control, Expires, ETag, Last-Modified等)。缓存策略根据服务器返回的响应头动态调整,可以有效减少重复请求,提高性能。 3. 缓存...
这主要依赖于两个响应头:`Cache-Control` 和 `Expires`。`Cache-Control` 是HTTP/1.1中的标准,具有更高的优先级。例如,`Cache-Control: max-age=3600` 表示资源在1小时内有效。`Expires` 是HTTP/1.0的遗留字段,...