浏览器缓存相关http头尽量减少http的请求次数

所属分类: 网页制作 / 应用技巧 阅读数: 1854
收藏 0 赞 0 分享
最近看雅虎黄金34条,学习下优化网站性能的方法。其中有一条:“为文件头指定Expires或Cache-Control”,具体来说指对于静态内容:设置文件头过期时间Expires的值为“Never expire”永不过期;而对于动态内容:使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求。

这一条可以和雅虎34条的第一条联系起来,那就是尽量减少http的请求次数(雅虎34条很多都是努力去减少http请求为目的的),毕竟如果有太多的资源需要下载需要新的http链接叠加起来的耗时是不容忽视的。所以可以利用缓存技术来对网站的性能加以优化,从而避免不必要的http请求。刚好可以顺便整理下浏览器相关的缓存技术和与缓存相关的http的头:

1.Expires(过期时间):

HTTP头信息Expires(过期时间) 属性是HTTP控制缓存的基本手段,告诉浏览器缓存保存的时间。过了这个时间,缓存器就会向源服务器发送请求,检查文档是否被修改。适用于设置静态图片文件等等,而且对于控制有规律改变的网页也很有用,比如设置间隔固定的时间去更新等等;如果使用了Expires文件头,当页面内容改变时就必须改变内容的文件名。比如Yahoo经常使用这样的步骤:在内容的文件名中加上版本号,如yahoo_2.0.6.js,从而能够主动进行更新。

使用expires: 如果你使用的是Apache服务器,可以使用ExpiresDefault来设定相对当前日期的过期时间,使用mod_expires,在httpd.conf或者.htaccess中加上

复制代码
代码如下:

<FilesMatch "\\.(ico|gif|jpg|html)$">ExpiresDefault "access plus 10 years"</FileMatch>

2.Cache-Control

各个消息中的指令含义如下:

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

举例:

一般说来这种静态文件永远不应该过期,如果真的要给这个Cache加上一个期限,那我希望是 ——一万年

即:“Cache-Control: max-age = 315360000000”

3.Last-Modified/If-Modified-Since
一问一答的模式,这边问你更新了没有,那边回答,很容易理解;
4.配置ETag
Entity tags(ETags)(实体标签)是web服务器和浏览器用于判断浏览器缓存中的内容和服务器中的原始内容是否匹配的一种机制(“实体”就是所说的“内 容”,包括图片、脚本、样式表等)。增加ETag为实体的验证提供了一个比使用“last-modified date(上次编辑时间)”更加灵活的机制。Etag是一个识别内容版本号的唯一字符串。唯一的格式限制就是它必须包含在双引号内。原始服务器通过含有 ETag文件头的响应指定页面内容的ETag。例如:

HTTP/1.1 200 OK

Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: “10c24bc-4ab-457e1c1f”
Content-Length: 12195
稍后,如果浏览器要验证一个文件,它会使用If-None-Match文件头来把ETag传回给原始服务器。在这个例子中,如果ETag匹配,就会返回一 个304状态码,这就节省了12195字节的响应。

GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: “10c24bc-4ab-457e1c1f”
HTTP/1.1 304 Not Modified

关于以上几种缓存机制的优先级,在网上找到一种说法:

no-cache>Expires>Last-Modified

也就是讲,最前面的最重要,前面的生效后,后面的基本就失效了
更多精彩内容其他人还在看

sitemesh教程-页面装饰技术原理及应用

Sitemesh是一种页面装饰技术:它通过过滤器(filter)来拦截页面访问,据被访问页面的URL找到合适的装饰模板等等,感兴趣的朋友可以了解下哦
收藏 0 赞 0 分享

浏览器可以注册的事件小结

我们在网页制作中经常会用到浏览器事件,这里简单的整理下方便需要的朋友
收藏 0 赞 0 分享

从image/x-png谈ContentType(s)

今天在做一个文件上传的功能的时候,发现我总是上传不了png的图片。经过调试发现,应该是在ContentType的地方判断失误了。后来百度了一下发现一个有意思的现象,我发现png的图片的ContentType并不是我在注册表中看到的image/png,而是image/x-png
收藏 0 赞 0 分享

窗口中的各种距离/滚动距离的精确计算汇总

平时在项目开发中,没少跟边距,位置,坐标什么的打交道,悲剧的是,如果你对这些东西没有非常清晰的概念,编码的时候会非常痛苦,到处找资料寻求距离的精确计算,接下来本文提供一个示意他,希望对你有帮助
收藏 0 赞 0 分享

web的各种前端打印方法之CSS控制网页打印样式

使用CSS控制打印样式,握刚刚使用时一塌糊涂,根本不知道CSS中的midia的作用是什么,问到别人说导入这个样式,还傻乎乎的不知所措,接下来介绍CSS控制网页打印样式是如何实现的
收藏 0 赞 0 分享

响应式WEB设计学习(1)—判断屏幕尺寸及百分比的使用

现在移动设备越来越普及,用户使用智能手机、pad上网页越来越普遍,但是传统的fix型的页面在移动终端上无法很好的显示。因此,Ethan Marcotte提出一种响应式web设计的概念,响应式web设计的英文为Responsive Web Design,简写为RWD,感兴趣的朋友可
收藏 0 赞 0 分享

响应式WEB设计学习(2)—视频能够做成响应式吗

除了图片以外,还有一种常见的多媒体形式是视频。有时在web设计中,根据需要会在页面中加入视频,视频大小的自适应单靠CSS本身似乎是做不到的,感兴趣的朋友可以详细了解下
收藏 0 赞 0 分享

响应式WEB设计学习(3)—如何改善移动设备网页的性能

究竟是网页中的何种元素拉低了网页在移动设备中加载的速度呢?这些元素应该做何处理以提升页面在移动设备中的整体性能?是否存在一种设计模式可以同时满足移动端及桌面端的页面设计呢?带着这些疑问开始本文之旅吧
收藏 0 赞 0 分享

网页设计必备手册 216网页安全色大全

网页安全色是指在不同硬件环境、不同操作系统和不同浏览器中都能够正常显示的颜色集合(调色板或者色谱),也就是说这些颜色在任何终端用户的显示设备上都是相同的效果
收藏 0 赞 0 分享

网页设计中设计出有层次感的界面的经验介绍

很多网友常说自己的网站为什么色彩上总是有问题,总是看起来没什么精神,没办法吸引人注意。观察了一些网友们设计的网站发现他们在用色上不够大胆,同时也缺乏对色彩层次的理解。
收藏 0 赞 0 分享
查看更多