zoukankan      html  css  js  c++  java
  • 浏览器缓存相关http头

    近期看雅虎黄金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

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

  • 相关阅读:
    sqlserver更新数据表结构增加新字段时,和它相关联的视图出现错列现象
    form表单中的Input使用disabled不能提交的解决方法
    MVC4升级到MVC5的问题,安全透明方法“WebMatrix.WebData.PreApplicationStartCode.Start()”尝试访问安全关键方法“System.Web.WebPages.Razor.WebPageRazorHost.AddGlobalImport(System.String)”失败
    快速建立一个手机网站
    NoSQLMongoDB选择
    基于HTML5手机技术方案(如Phonegap)的调试方案
    最后的绝唱Symbian 最新的IDE开发环境搭建(Updated on 20110307)
    由NodeJS浅谈无敌的前端开发工程师
    物联网(1)手机NFC识别方案平台
    大话网站从Hello World到高并发网站
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5224104.html
Copyright © 2011-2022 走看看