理解HTTP headers之Expires、Cache-Control、IF-Modified-Since

转载 2015年11月19日 13:16:28

一、什么是Http headers?

当你在浏览器地址栏里键入一个url,你的浏览器将会类似如下的http请求:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

第一行被称为“Request Line” 它描述的是这个请求的基本信息,剩下的就是HTTP headers了。

HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息

二、Expires、Cache-Control、IF-Modified-Since

 1、概念:Expires是RFC 2616(HTTP/1.0)协议中和网页缓存相关字段。用来控制缓存的失效日期,要注意的是,HTTP/1.0有一个功能比较弱的缓存控制机制:Pragma,使用HTTP/1.0的缓存将忽略Expires和Cache-Control头。

2、网页的缓存是由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临时文章夹留下页面备份。

三、应用

  通过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。

     

 

设置max-age|expires进行优化网站

网页的缓存是由 HTTP 消息头中的 “Cache-control” 来控制的,常见的取值有 private、no-cache、max-age、must-revalidate 等,默认为private...
  • Meseal
  • Meseal
  • 2015年12月08日 16:22
  • 4566

HTTP消息头中的“Cache-control”控制网页的缓存

网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no- cache、max-age、must-revalidate等,默认为private。其作用根...
  • kent_kent_kent
  • kent_kent_kent
  • 2015年01月30日 19:41
  • 1797

浅谈前端性能优化(一)——Expires和Cache-Control

前端性能优化中,减少HTTP请求可以提高页面的响应速度。 浏览器在第一次访问页面时向服务器请求资源,并缓存起来,下次再访问时会判断在缓存中是否已有该资源且有没有更新过,如果已有该资源且未更新过,则直接...
  • zhouziyu2011
  • zhouziyu2011
  • 2017年05月07日 11:57
  • 1816

http Cache-Control: If-None-Match ETag/If-Modifed-Since Last-Modified

这里最终决定采用chunked是为了和长连接[3]配合使用, 省去slow-start ack/congestion window 增加到正常大小的时间,还有3次握手时间(究竟是多少毫秒?) ...
  • deyangliu
  • deyangliu
  • 2015年08月26日 20:01
  • 465

Http头介绍:Expires,Cache-Control,Last-Modified,ETag

转载自:http://www.51testing.com/html/28/116228-238337.html 缓存对于web开发有重要作用,尤其是大负荷web系统开发中。 缓存分很多种:...
  • reliveIT
  • reliveIT
  • 2015年02月25日 18:41
  • 575

浏览器缓存相关的Http头介绍:Expires,Cache-Control,Last-Modified,ETag

浏览器缓存相关的Http头介绍:Expires,Cache-Control,Last-Modified,ETaghttp://www.path8.net/tn/archives/2685作者: fen...
  • xcyuzhen
  • xcyuzhen
  • 2011年04月18日 02:31
  • 2667

图片缓存:浏览器刷新 和 304 Not Modified 与 If-Modified-Since 及 Cache-Control

今天在用chrome浏览淘宝页面的时候,发现很多来自淘宝图片HTTP状态码是 304 Not Modified 到百度搜索了一下,明白了 304状态的含义(以下绿色内容来自网络): 304 Not...
  • wlywly1987
  • wlywly1987
  • 2012年03月13日 09:53
  • 2911

Expires,Cache-Control,Last-Modified,ETag

Expires、Cache-Control、Last-Modified、ETag都是在http response的返回header中 用来控制浏览器客户端缓存行为的。 1.Expires在HTTP/1...
  • kkdelta
  • kkdelta
  • 2013年11月27日 14:59
  • 10178

浏览器缓存:expires Cache-Control Last-Modified Etag

缓存机制 (http1.0中)检查expires过期时间, (http1.1中)检查Cache-Control的max-age,优先级更高 Pragma(兼容http1.0, 在HTTP/1.1协...
  • u012937029
  • u012937029
  • 2017年05月07日 15:00
  • 245

浏览器缓存及应用Cache-Control(用于本地缓存),Expires(用于本地缓存),Last-Modified(协商缓存),Etag(协商缓存)

1.与浏览器缓存相关的http headers   Cache-Control(用于本地缓存),Expires(用于本地缓存),Last-Modified(协商缓存),Etag(协商缓存) Cac...
  • lvsmaster
  • lvsmaster
  • 2011年08月26日 10:48
  • 5121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解HTTP headers之Expires、Cache-Control、IF-Modified-Since
举报原因:
原因补充:

(最多只允许输入30个字)