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-httpcache`是Laravel 5中用于实现这一功能的组件,它基于Symfony的HttpCache库。下面我们将深入探讨`laravel-httpcache`的原理、配置和使用方法。 首先,了解HTTP缓存的基本概念。HTTP缓存主要分为两种...
开源项目-gregjones-httpcache.zip,A Transport for http.Client that will cache responses according to the HTTP RFC
HttpCache是HTTP协议中的一种缓存机制,它允许客户端(如Android应用)存储服务器响应,以便在后续相同请求时直接使用缓存的副本,无需再次通过网络获取数据。在Android中,可以通过设置`OkHttp`或`Volley`等网络库...
HTTP 缓存是提高网页加载速度和降低服务器压力的关键机制,它主要由HTTP消息头中的`Cache-Control`字段控制。`Cache-Control`指令允许服务器告诉客户端(如浏览器)如何处理缓存的响应。理解并正确使用`Cache-...
这篇博客文章,"HTTP cache training",虽然没有提供直接的描述,但我们可以推测它会深入探讨HTTP缓存的工作原理及其在实际开发中的应用。 HTTP缓存主要分为两种类型:浏览器缓存(客户端缓存)和代理缓存(服务器...
Slim-HttpCache, thin框架HTTP缓存中间件和服务提供程序 框架HTTP缓存 这个存储库包含一个瘦框架HTTP缓存中间件和服务提供者。安装通过编辑器$ composer require slim/http-cache需要 Slim 3.0.0或者更高版本。用法
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 无效。 ...
File cacheDir = new File(context.getCacheDir(), "httpcache"); int cacheSize = 10 * 1024 * 1024; // 10MB CacheConfig config = new CacheConfig().setMaxSize(cacheSize).setCacheDir(cacheDir); Cache ...
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 " }}
Nginx Cache Purge 是一个专门为Nginx设计的插件,它允许我们通过HTTP请求来清除指定的缓存内容。这个小工具极大地简化了对Nginx缓存的管理,确保了网站内容更新时,用户能够快速获取到最新的信息,避免了旧版本的...
ngx_cache_purge_2.4.2.tar.gz 是一个针对Nginx缓存管理的模块扩展,主要用于清除或刷新Nginx服务器上的HTTP缓存。这个版本2.4.2的压缩包包含了ngx_cache_purge模块的所有源代码及相关文件,以便开发者在自己的Nginx...
前端Cache主要通过HTTP协议中的头信息进行控制,如: - Last-Modified:指示文件的最后修改时间。 - Date:服务器发送文档的时间。 - Expires:指定文档的过期时间,过期后浏览器不再使用本地缓存。 - Cache-Control...
而页面缓存则是对整个HTTP响应进行缓存,包括视图、布局、部分视图以及数据库查询结果,从而显著提高页面加载速度,特别是对于那些动态内容较少、但访问频繁的页面。 ### 安装`laravel-page-cache` 1. 首先,通过...
### Cachecloud文档解析 #### 一、概述 **Cachecloud** 是一款专为 Redis 集群管理和操作设计的开源工具。它通过提供一个统一的管理界面,简化了 Redis 实例的部署、监控以及维护过程。Cachecloud 支持多种 Redis ...
它基于Connect库,提供了丰富的中间件系统,让开发者能够轻松处理HTTP请求和响应,构建功能强大的Web服务器。Express支持多种模板引擎,路由控制,以及各种插件,极大地简化了Node.js web开发流程。 `gruntjs` 是一...