近期看雅虎黄金34条,学习下优化站点性能的方法。

当中有一条:“为文件头指定Expires或Cache-Control”,详细来说指对于静态内容:设置文件头过期时间Expires的值为“Never
expire”永只是期;而对于动态内容:使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求。

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

1.Expires(过期时间):

HTTP头信息Expires(过期时间)
属性是HTTP控制缓存的基本手段,告诉浏览器缓存保存的时间。过了这个时间,缓存器就会向源server发送请求。检查文档是否被改动。适用于设置静态图片文件等等,并且对于控制有规律改变的网页也非常实用,比方设置间隔固定的时间去更新等等;假设使用了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指示对于单个用户的整个或部分响应消息。不能被共享缓存处理。这同意server只描写叙述当用户的部分响应消息,此响应消息对于其它用户的请求无效。

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

一问一答的模式,这边问你更新了没有,那边回答。非常easy理解。

4.配置ETag

Entity tags(ETags)(实体标签)是webserver和浏览器用于推断浏览器缓存中的内容和server中的原始内容是否匹配的一种机制(“实体”就是所说的“内 容”,包含图片、脚本、样式表等)。添加ETag为实体的验证提供了一个比使用“last-modified
date(上次编辑时间)”更加灵活的机制。

Etag是一个识别内容版本的唯一字符串。唯一的格式限制就是它必须包括在双引號内。

原始server通过含有 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传回给原始server。在这个样例中,假设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

也就是讲,最前面的最重要,前面的生效后,后面的基本就失效了

浏览器缓存相关http头的更多相关文章

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

    转自:http://www.path8.net/tn/archives/2745 缓存对于web开发有重要作用,尤其是大负荷web系统开发中. 缓存分很多种:服务器缓存,第三方缓存,浏览器缓存等.其中 ...

  2. 浏览器缓存相关HTTP头部字段

    1.Cache-Control/Pragma 2.Expires 3.Last-Modified/Etag

  3. http-cache浏览器缓存

    摘至知乎 首先得明确 http 缓存的好处 减少了冗余的数据传输,减少网费 减少服务器端的压力 Web 缓存能够减少延迟与网络阻塞,进而减少显示某个资源所用的时间 加快客户端加载网页的速度 常见 ht ...

  4. JavaWeb学习篇之----浏览器缓存问题详解

    摘要 1.Etag和Expires中Client 端Http Request Header及Server端Http Reponse Header工作原理. 2.静态下Apache.Lighttpd和N ...

  5. Hexo一键部署到阿里云OSS并设置浏览器缓存

    自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...

  6. php头函数和浏览器缓存

    可以通过php头函数改变返回给浏览器的头信息 例: 代码中添加头: header("Cache-Control: max-age=31536000"); header(" ...

  7. HTTP中缓存相关

    1.客户端如何区分缓存命中和未命中 两种情况下,返回的状态码都是200,客户端有一个方法可以判断,就是使用Date首部,将Date首部与当前时间进行比较,如果响应中时间日期值比较早,客户端可以认为这是 ...

  8. web基础-web工作原理,http协议,浏览器缓存

    1,web工作原理 2,http协议 3,浏览器缓存 4,cookie和session -------------------------------------------------------- ...

  9. 浏览器缓存(Egret项目实例分析)

    参考文章: 浏览器缓存机制:http://web.jobbole.com/82997/ 浏览器缓存机制:http://www.cnblogs.com/skynet/archive/2012/11/28 ...

随机推荐

  1. mycat实例(1)

    2016二月 22 置原 MyCat - 使用篇(1) 分类:数据库分库分表(Mycat等) (1126) (1) 数据库路由中间件MyCat - 使用篇(1) 基本概念 直接介绍概念太枯燥了,还是拿 ...

  2. java遍历泛型的方法

    一.List遍历 Java中List遍历有三种方法来遍历泛型,主要为: 1.for循环遍历 2.iterator遍历 3.foreach遍历 package com.gmail.lsgjzhuwei; ...

  3. VC皮肤库SkinSharp 1.0.6.6的使用

    SkinSharp又称Skin#,是Windows环境下一款强大的换肤组件. SkinSharp作为换肤控件,仅仅须要在您的程序中加入一行代码,就能让您的界面焕然一新,并拥有多种主题风格和色调的动态切 ...

  4. spring aop获取目标对象的方法对象(包括方法上的注解)

    这两天在学习权限控制模块.以前看过传智播客黎活明老师的巴巴运动网视频教程,里面就讲到权限控制的解决方案,当时也只是看看视频,没有动手实践,虽说看过几遍,可是对于系统中的权限控制还是很迷茫,所以借着这次 ...

  5. python-生成随机字符

    需求: 随机生成6位的大写字母: 方法一: #!/usr/bin/env python # -*- coding:utf-8 -*- import random li = [] for i in ra ...

  6. NET中级课--文件,流,序列化2

    1.流的类型体系: 基础流    装饰器流    包装器类    帮助类 2.               stream file~     memory~     network~ stream是个 ...

  7. CLR via C# - GC

    //像背书一样,记录下吧 1.CLR分配资源 托管堆上维护着一个指针NextObjPtr.该指针表示下一个新建对象在托管堆上的位置.C#的new Object会产生IL newobj指令,NextOb ...

  8. 进阶笔记(2)——JavaScript语言精碎

    正则       /     正则表达式      / ^   表示字符串开始 (?:...)   表示一个非捕获型分组(没多大意义) 后缀 ? 表示匹配 0 或 1次 ( ... )   表示捕获型 ...

  9. stretchlim函数分析

    在看imadjust代码时,看到stretchlim函数,特此分析一下,代码注释如下 function lowhigh = stretchlim(varargin) %STRETCHLIM Find ...

  10. IE 与 FireFox 的 event 详解 (转)

    原文链接 FF的FIREBUG,不仅能测试JS还能检查CSS错误,是一般常用的. 但它主要检查FF方面的错误,对IE就无能为力了. 要测试IE,就用ieTester,它可以测试IE几乎所有版本(1.0 ...