`

http cache

 
阅读更多

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的请求 

分享到:
评论

相关推荐

    Laravel开发-laravel-httpcache

    `laravel-httpcache`是Laravel 5中用于实现这一功能的组件,它基于Symfony的HttpCache库。下面我们将深入探讨`laravel-httpcache`的原理、配置和使用方法。 首先,了解HTTP缓存的基本概念。HTTP缓存主要分为两种...

    开源项目-gregjones-httpcache.zip

    开源项目-gregjones-httpcache.zip,A Transport for http.Client that will cache responses according to the HTTP RFC

    Android公共库,包括ImageCache、HttpCache

    HttpCache是HTTP协议中的一种缓存机制,它允许客户端(如Android应用)存储服务器响应,以便在后续相同请求时直接使用缓存的副本,无需再次通过网络获取数据。在Android中,可以通过设置`OkHttp`或`Volley`等网络库...

    http cache-control详解

    HTTP 缓存是提高网页加载速度和降低服务器压力的关键机制,它主要由HTTP消息头中的`Cache-Control`字段控制。`Cache-Control`指令允许服务器告诉客户端(如浏览器)如何处理缓存的响应。理解并正确使用`Cache-...

    HTTP cache trainning

    这篇博客文章,"HTTP cache training",虽然没有提供直接的描述,但我们可以推测它会深入探讨HTTP缓存的工作原理及其在实际开发中的应用。 HTTP缓存主要分为两种类型:浏览器缓存(客户端缓存)和代理缓存(服务器...

    Slim-HttpCache, thin框架HTTP缓存中间件和服务提供程序.zip

    Slim-HttpCache, thin框架HTTP缓存中间件和服务提供程序 框架HTTP缓存 这个存储库包含一个瘦框架HTTP缓存中间件和服务提供者。安装通过编辑器$ composer require slim/http-cache需要 Slim 3.0.0或者更高版本。用法

    HttpCache:Marvin.HttpCache 是 RFC2616 Http 缓存标准的完整实现,可与 HttpClient 一起使用,适用于所有 .NET Framework 平台(Windows 应用商店、Windows Phone、WPF、WinForms、控制台应用程序)。 查看当前状态并了解尚未实施的内容

    Marvin.HttpCache 介绍和入门 NuGet: : 什么是 Http 缓存,为什么需要它? Http 缓存有时被称为“缓存的圣杯”。 它在有完整描述 它通常用于基于 REST 的架构系统,并且可以带来巨大的性能改进。 该标准由服务器...

    httpcache:R 的 HTTP 查询缓存

    httpcache:HTTP 客户端的查询缓存 为了提高 HTTP API 客户端的性能, httpcache提供了用于缓存和使缓存失效的简单工具。 它包括 HTTP 动词函数GET 、 PUT 、 PATCH 、 POST和DELETE ,它们是包中替代品。 这些函数...

    httpcache4j:https的只读镜像

    HTTPCache4j 一个 Java 浏览器缓存。 HTTP Cache 4 Java 是一个试图维护 HTTP 中定义的缓存规则的项目。 这些规则主要在 RFC2616 的中定义。 httpbis 中的规则略有变化,将产生一组新的 RFC,这将使 RFC2616 无效。 ...

    httpclient_cache_4.5.0.jar.7z

    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:用于mruby-rack的缓存中间件

    mruby-rack-httpcache 用于缓存中间件 安装 build_config.rb下行添加到您的build_config.rb : conf.gem :github => 'i110/mruby-rack-httpcache' 执照 版权所有(c)2018 Ichito Nagata 特此免费授予获得此软件...

    httpcache-doctrinecache-store:Symfony Http缓存的教义缓存存储

    原则缓存存储 存储安装方式该软件包可在上。 自动加载功能与兼容。 { " require " : { " httpcache/doctrinecache-store " : " dev-master " }}

    nginx_cache_purge.zip

    Nginx Cache Purge 是一个专门为Nginx设计的插件,它允许我们通过HTTP请求来清除指定的缓存内容。这个小工具极大地简化了对Nginx缓存的管理,确保了网站内容更新时,用户能够快速获取到最新的信息,避免了旧版本的...

    ngx_cache_purge_2.4.2.tar.gz

    ngx_cache_purge_2.4.2.tar.gz 是一个针对Nginx缓存管理的模块扩展,主要用于清除或刷新Nginx服务器上的HTTP缓存。这个版本2.4.2的压缩包包含了ngx_cache_purge模块的所有源代码及相关文件,以便开发者在自己的Nginx...

    网站Cache全分析.doc

    前端Cache主要通过HTTP协议中的头信息进行控制,如: - Last-Modified:指示文件的最后修改时间。 - Date:服务器发送文档的时间。 - Expires:指定文档的过期时间,过期后浏览器不再使用本地缓存。 - Cache-Control...

    Laravel开发-laravel-page-cache

    而页面缓存则是对整个HTTP响应进行缓存,包括视图、布局、部分视图以及数据库查询结果,从而显著提高页面加载速度,特别是对于那些动态内容较少、但访问频繁的页面。 ### 安装`laravel-page-cache` 1. 首先,通过...

    Cachecloud文档

    ### Cachecloud文档解析 #### 一、概述 **Cachecloud** 是一款专为 Redis 集群管理和操作设计的开源工具。它通过提供一个统一的管理界面,简化了 Redis 实例的部署、监控以及维护过程。Cachecloud 支持多种 Redis ...

    npm-cache 文件

    它基于Connect库,提供了丰富的中间件系统,让开发者能够轻松处理HTTP请求和响应,构建功能强大的Web服务器。Express支持多种模板引擎,路由控制,以及各种插件,极大地简化了Node.js web开发流程。 `gruntjs` 是一...

Global site tag (gtag.js) - Google Analytics