Http的Cache机制总共有4个组成部分:
Cache-Control: max-age=N(seconds)
Last-Modified: Date, If-Modified-Since: Date
Etag: "xxxx"
Expires: Date
它们都存在于Request或者Response的Header中
按照作用来分可以分为浏览器端和服务器端。
浏览器端:
注:刷新都会无视浏览器端的Cache
Cache-Control: max-age=N(seconds)
Expires: Date
Cache-Control的max-age优先级高于Expires(至少对于Apache是这样的),即如果定义了Cache-Control: max-age,则完全不需要加上Expries,因为根本没用。例如:你在浏览A页面时,A页面加载了一个名为B的JS文件,该JS文件的Response Header中有Cache-Control: max-age=60,如果你再访问任何其他用到B文件的页面时,60秒内浏览器完全不会向服务器发送请求,直接使用Cache中的内容。60秒以后,Cache失效。想每一次都发送请求,则max-age设为0
Cache-Control在Apache中的设置为
Header set Cache-Control "max-age: 60"
Expires是相同的功能,不过参数是个绝对的日期,不是一个相对的值
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
如果使用mod_expires.so也可以根据相对值计算出绝对值
服务器端:
Last-Modified: Date, If-Modified-Since: Date
ETag
继续刚才上面的例子,当max-age超过以后,浏览器会向服务器端发送请求。在B文件上一次的Response Header中会带有Last-Modified: Date,这时新请求的Header中会有If-Modified-Since: Date。服务器端在收到请求后,将B的最后修改日期和Header中的日期进行对比,如果相同则说明B没有被修改过,返回304 Not Modified,否则返回200和B的内容
如果只设置了Last-Modified而没有设置Cache-Control,则不同浏览器的表现会不同: 1. IE中也许有个默认的非常大的max-age或者压根就是无限,服务器端修改的内容,IE中不会反映出来 2. FF和Webkit请求的比较随机,貌似刚刚变更后请求的会比较频繁,然后逐渐放大请求的间隔,但是服务器端修改了内容,我还没试出来浏览器不更新的...
Etag和Last-Modified也是类似的,只不过检查的不是最后修改的时间,而是被请求内容的Hash
Etag和Last-Modified在Apache中默认都是打开的,关闭的方法是
Header unset Etag
Header unset Last-Modified
综上所述:
对于静态的内容:如果引用静态文件时可以根据文件的修改时间生成动态的文件名,并rewrite到实际的文件,则可以设置max-age: 5184000(2个月,其实可以更长,比如1年),这样的话可以省去大量的http请求。否则的话,只能设置Last-Modified(或者Etag,Etag估计比较耗cpu) + max-age: 0,则每次都会发送请求,并且大多数会得到304 Not Modified
对于变更不频繁的动态内容:可以在response中加上Cache-Control: max-age=0 + Last-Modified(ETag),可以让很多200的请求变成304的请求
转自 http://alricren.iteye.com/blog/550753
相关推荐
Laravel开发-laravel-httpcache Laravel 5的httpcache
开源项目-gregjones-httpcache.zip,A Transport for http.Client that will cache responses according to the HTTP RFC
关于http cache-control详解,对学习http有很大的帮助
Slim-HttpCache, thin框架HTTP缓存中间件和服务提供程序 框架HTTP缓存 这个存储库包含一个瘦框架HTTP缓存中间件和服务提供者。安装通过编辑器$ composer require slim/http-cache需要 Slim 3.0.0或者更高版本。用法
主要介绍了Symfony2框架HTTP Cache用法,结合实例形式分析了Symfony框架HTTP缓存的相关使用技巧,需要的朋友可以参考下
Marvin.HttpCache 介绍和入门 NuGet: : 什么是 Http 缓存,为什么需要它? Http 缓存有时被称为“缓存的圣杯”。 它在有完整描述 它通常用于基于 REST 的架构系统,并且可以带来巨大的性能改进。 该标准由服务器...
httpcache:HTTP 客户端的查询缓存 为了提高 HTTP API 客户端的性能, httpcache提供了用于缓存和使缓存失效的简单工具。 它包括 HTTP 动词函数GET 、 PUT 、 PATCH 、 POST和DELETE ,它们是包中替代品。 这些函数...
HTTPCache4j 一个 Java 浏览器缓存。 HTTP Cache 4 Java 是一个试图维护 HTTP 中定义的缓存规则的项目。 这些规则主要在 RFC2616 的中定义。 httpbis 中的规则略有变化,将产生一组新的 RFC,这将使 RFC2616 无效。 ...
mruby-rack-httpcache 用于缓存中间件 安装 build_config.rb下行添加到您的build_config.rb : conf.gem :github => 'i110/mruby-rack-httpcache' 执照 版权所有(c)2018 Ichito Nagata 特此免费授予获得此软件...
原则缓存存储 存储安装方式该软件包可在上。 自动加载功能与兼容。 { " require " : { " httpcache/doctrinecache-store " : " dev-master " }}
NULL 博文链接:https://hmh1985.iteye.com/blog/1988650
查看 清除http cache的好工具,比如在做JS,开发,特别是现在的ajax时,很好用
Web Cache是Oracle应用服务器的一个组件,起着HTTP高速缓存和负载均衡的作用。利用其HTTP高速缓存的功能,可以在HTTP层面上实现网站的异地镜像缓存。虽然它实现的镜像并非传统意义上的完全镜像,而更像一个具有高速...
法拉第Http缓存 一种中间件,它通过检查存储的响应的... 您可以使用带符号的新快捷方式或传递中间件类client = Faraday . new do | builder | builder .... cache # or builder . use Faraday :: HttpCache , store : R
http头部cache-control字段解析,包含一个doc文件和一个pdf文件
基于java的开发源码-HTTP代理服务器 Smart Cache.zip 基于java的开发源码-HTTP代理服务器 Smart Cache.zip 基于java的开发源码-HTTP代理服务器 Smart Cache.zip 基于java的开发源码-HTTP代理服务器 Smart Cache.zip ...
在本实验中,你将使用benchmark程序产生的memory trace文件来测试Cache命中率,文件可以在http://cseweb.ucsd.edu/classes/fa07/cse240a/proj1-traces.tar.gz上获得。 每次存储器访问都包含了三个信息: 访问类型...
httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5的jar包下载。 比如微信退款需要以上jar包
一、CacheCloud是做什么的CacheCloud提供一个Redis云... 添加机器进入管理员界面(http://ip:port/manage/total/list),进入机器管理,点击添加机器,添加机器信息是开通应用的基础。 标签:CacheCloud redis