`
javalover123
  • 浏览: 20319 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

HTTP头的Expires与Cache-control

    博客分类:
  • web
阅读更多

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.0Pragmano-cache替换)

根据什么能被缓存

no-store  用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

根据缓存超时

max-age  指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

min-fresh  指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

max-stale  指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以

接收超出超时期指定值之内的响应消息。

Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age

效果。但是如果同时存在,则被Cache-Controlmax-age覆盖。

格式:

Expires = "Expires" ":" HTTP-date

例如

Expires: Thu, 01 Dec 1994 16:00:00 GMT 必须是GMT格式

 

2.应用

通过HTTPMETA设置expirescache-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可以通过apachemod_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"

见 Apache Module mod_expires

另外,当点击浏览器上的刷新,客户端发送的请求中均是max-age=0,表示validate操作,发送请求到服务器

要求检查cache,再更新cache,一般得到的是304 Not Modified,表示没变动。

!!具体实例各类操作与Cache-control选项的关系:

网页的缓存是由 HTTP消息头中的“Cache-control”来控制的,常见的取值有privateno-cachemax-agemust- revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:

 

1) 打开新窗口

    值为privateno-cachemust-revalidate,那么打开新窗口访问时都会重新访问服务器。

而如果指 定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:

Cache-control: max-age=5(表示当访问此网页后的5内再次访问不 会去服务器)

 

2) 在地址栏回车

    值为privatemust-revalidate则只有第一次访问时会访问服务器,以后就不再访问。

    值为no-cache,那么每次都会访问。

    值为max-age,则在过期之前不会重复访问。

 

3) 按后退按扭

   值为privatemust-revalidatemax-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-->
分享到:
评论

相关推荐

    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 中间件设置响应头缓存选项

    缓存控制中间Express/Connect 中间件设置响应头缓存选项安装 npm install cache-control-midd --save用法 var express = require ( 'express' ) ;var cacheControl = require ( 'cache-control-midd' ) ;var app = ...

    2018最新BAT python面试题.docx

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

    页面优化黄金规则

    页面性能优化的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...

    dokku-nginx-cache

    Dokku Nginx 缓存 在 Nginx 的代理缓存指令中连线。 用测试。 您的里程可能因香草 Dokku 而异。... X-Accel-Expires 、 Expires 、 Cache-Control 、 Set-Cookie和Vary设置响应的参数; X-Accel-Redirect执行到指定

    TCP-HTTP-操作系统.pdf

    强制缓存(from disk cache):在响应时可以设置有效期Cache-Control(相对时间)或者Expires(绝对 时间),同时存在时Cache-Control的优先级高。 协商缓存:在请求服务器时返回304,与服务端协商之后,通过协商结果...

    Microsoft Edge Insider 安装包提取,可离线安装

    Cache-Control: no-cache Connection: Keep-Alive Pragma: no-cache User-Agent: Microsoft Edge Update/1.3.107.15;winhttp X-Old-UID: age=7; cnt=1 X-Last-HR: 0x0 X-Last-HTTP-Status-Code: 0 X-Retry-Count: 0 ...

    浏览器之HTTP缓存的那些事

    浏览器之HTTP缓存的那些事 什么是浏览器缓存 浏览器HTTP执行机制 缓存模式 缓存相关的Http Header Cache-Control Expires Last-Modified ETag

    nginx expires控制页面缓存

    语法:expires [time|epoch|max|pff]默认值:offexpires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用time:可以使用正数或负数。“Expires”头标的值将通过当前系统...

    浏览器缓存相关知识.zip

    强缓存的实现主要依赖于Expires和Cache-Control这两个HTTP头信息。 Expires是一个较老的强缓存管理header,它包含一个GMT格式的绝对时间字符串,告诉浏览器在这个时间之前可以直接从浏览器缓存中加载资源,而无需去...

    ASP.NET性能优化之减少请求

    值得注意的是Cache-Control是在HTTP/1.1协议下的标识,它是HTTP/1.0协议中的Expires的升级。为了让静态页支持Cache-Control,一种方案是在IIS中进行设置,如下,我在需要静态缓存的页面或者文件夹上右键-&gt;属性: 我...

    jsp学习项目

    &lt;meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt; &lt;meta ...

    javascript 经典代码大全

    &lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"&gt; &lt;META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"&gt; 或者&lt;META HTTP-EQUIV="expires" CONTENT="0"&gt;

    springword

    &lt;meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt; &lt;meta ...

    Web应用与开发作业

    response.setHeader("Cache-Control","no-cache"); response.setHeader("Pragma","no-cache"); (3)并不是所有的浏览器都能完全支持上面的3个响应头,因此最好是同时使用上面的3个响应头。 2、Filter的理解和应用 ...

    cacheable-site-silex:利用HTTP开发可缓存的站点。 该示例站点是使用Silex框架以PHP编写的

    使用Cache-Control标头,使用伪指令(如Public , Private来确定哪些HTTP响应是可缓存的,哪些不是使用诸如Max-Age和S-Maxage等指令的Cache-Control标S-Maxage确定可以将HTTP响应缓存多长时间Expires标头Expires...

    如何防止IE缓存jsp文件

    1, 使用java提供的方法,在jsp或者servlet中都可以 &lt;&#37; response.setHeader(Pragma,No-cache); response.setHeader(Cache-Control,no-...META HTTP-EQUIV=Cache-Control CONTENT=no-cache&gt; &lt;META HTTP-

    PHPExecl.tar.gz

    header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header('Pragma: public'); // HTTP/1.0 $objWriter = new PHPExcel_Writer_Excel5($objPHPExcelWrite); $objPHPExcelWrite-&gt;getActiveSheet()-&gt;...

    c# 注销按钮返回登录

    /// /// 强制页面过期,重新向服务器请求刷新页面 /// public static void ClearClientPageCache() { HttpContext.Current.Response.Buffer = ... HttpContext.Current.Response.CacheControl = "no-cache"; }

Global site tag (gtag.js) - Google Analytics