`
mywebcode
  • 浏览: 1005110 次
文章分类
社区版块
存档分类
最新评论

浏览器缓存相关http头

 
阅读更多

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

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

分享到:
评论

相关推荐

    HTTP+JS+浏览器缓存技术

    总结了浏览器缓存的原理,如何管理浏览器缓存

    浏览器缓存相关知识.zip

    浏览器缓存 浏览器缓存主要可以分为两大类:客户端缓存和服务端缓存。客户端缓存,即浏览器缓存,是本文主要讨论的内容。而服务端缓存则主要包括代理服务器缓存和反向代理服务器缓存,以及广泛使用的CDN等。这些...

    2024年浏览器缓存HTTP缓存机制(面试常考).zip

    浏览器缓存【2024年浏览器缓存/HTTP缓存机制(面试常考)简介】 内容概要: 这篇博客为网络技术初学者提供了一个全面的理解浏览器缓存和HTTP缓存机制的指南。通过通俗易懂的语言,本博客介绍了浏览器缓存的工作原理...

    禁止浏览器缓存当前文档内容

    有三个HTTP响应头字段都可以禁止浏览器缓存当前页面: response.setDateHeader(“Expires”,0); response.setHeader(“Cache-Control”,”no-cache”); response.setHeader(“Pragma”,”no-cache”); 不是所有的...

    浏览器HTTP缓存机制

    描述了web浏览器,关于HTTP缓存机制的流程

    浏览器HTTP缓存运行机制流程图.zip

    浏览器HTTP缓存运行机制的流程图 强缓存和协商缓存

    浏览器缓存技术介绍以及优化建议

    资源介绍了浏览器缓存相关信息。浏览器缓存是一种性能优化技术,它允许浏览器存储网页资源的副本,以便在后续访问时快速加载。通过设置HTTP响应头,如`Expires`和`Cache-Control`,可以控制资源的缓存策略。强缓存...

    浏览器缓存机制面试常考.zip

    通过通俗易懂的语言,本博客介绍了浏览器缓存的工作原理,HTTP缓存控制字段,缓存策略的应用,以及面试中可能遇到的关于缓存的问题和实战演练。此外,还探讨了缓存的高级话题,如缓存头字段、缓存与性能的关系,以及...

    浏览器缓存机制

    浏览器缓存机制、Expires策略(http1.0)和Cache-control策略(http1.1)、Last-Modified/If-Modified-Since、ETag/If-None-Match

    UC浏览器缓存加密视频Y2hlbmppbmdjb25n文件破解合并exe工具

    1、【合并视频.exe】可将UC浏览器缓存或下载的Y2hlbmppbmdjb25n加密或非加密视频文件合并成mp4视频的工具。 2、使用示例:https://img-blog.csdnimg.cn/0a29f18018c246ebbe70efb82f72c288.png 该示例图可以复制链接...

    asp.net 客户端浏览器缓存的Http头介绍

    让浏览器做缓存需要给浏览器发送指定的Http头,告诉浏览器缓存多长时间,或者坚决不要缓存。作为.net的程序员,其实我们一直都在用这种方法,在OutputCache指令中指定缓存的Location为Client时,其实就是给浏览器...

    浏览器之HTTP缓存的那些事

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

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

    最近学习下优化网站性能的方法,其中有一个是为文件头指定Expires或Cache-Control,具体来说指对于静态内容设置文件头过期时间Expires的值为Never expire永不过期

    js清除浏览器缓存的几种方法

    关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能。但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据。像股票类网站实时更新等,这样的网站...

    Web应用与开发作业

    (2)有3个http响应头字段可以禁止浏览器缓存当前页面,它们在Servlet中的示例代码如下。 response.setDateHeader("Expires",-1); response.setHeader("Cache-Control","no-cache"); response.setHeader("Pragma",...

    关于angularJs清除浏览器缓存的方法

    浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能。但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据。像股票类网站实时更新等,这样的网站是不要缓存的,像...

    深入PHP与浏览器缓存的分析

    我们往往在服务器上对缓存设置进行... 其实浏览器在发送请求的时候会先发送http头,一般象这样:Date: Sun, 30 Jul 2006 09:18:11 GMTContent-Type: image/gifLast-Modified: Wed, 19 Jul 2006 07:40:06 GMTETag: “8c5

    ASP.NET性能优化之让浏览器缓存动态网页的方法

    OutputCache是针对所有访问服务器资源的用户,本篇要介绍的浏览器缓存则是针对单个用户,让浏览器在我们的控制下彻底不持续访问服务器上的动态内容,也就是我们要让浏览器变成我们的缓存机制中的一部分,在某些特定...

    浅析http协议、cookies和session机制、浏览器缓存.docx

    浅析http协议、cookies和session机制、浏览器缓存.docx

Global site tag (gtag.js) - Google Analytics