http_cache

http_cache

Table of Contents

  • html 控制缓存
  • apache 控制缓存
  • nginx 控制缓存
private cache     <== 存在客户端主机上
public cache      <== 存在缓存服务器上

缓存过期控制:

Cache-Control: max-age=484200     <== 多少秒
Expires: <date>                   <== 是一个时间, 类似 2015..

缓存验证:

If-Modified-Since: <date>     <== 是一个时间, 类似 2015.., 对应服务器端的 Last-Modified
If-None-Match: <etags>        <== 缓存的唯一标识, 类似 hash, 对应服务器端的 Etag

还有两个条件请求

If-Match, If-None-Modified-Since

验证规则:
仅仅匹配日期是不够的

  1. 日期修改, 内容不会被修改
  2. 修改如果不是很重要
  3. 无法准确判断时间

..

  1. 如果服务器有 etags 标签, 客户端必须用实体标签验证 If-None-Match
  2. 如果服务器只有 Last-Modified 值, 客户端要使用 If-Modified-Since 验证
  3. 如果服务器两个都有提供, 客户端两个都要验证

弱验证和强验证:
弱验证

GET /index.html HTTP/1.1
If-None-Match: W/"v4.0"        <== Weak

强验证: md5 校验和



Cache-Control:
请求: Client 请求 Server

no-store                  不要返回缓存过的文档, 表示要真正的文档
no-cache                  如果是缓存过的文档, 要先向 Server 验证一次, 再给 Client
max-age=484200            存活时间, Expires
max-stale                 过期了无所谓
max-stale=484200          过期 484200 秒才可用, 超过这个时间就不要
min-fresh=484200          484200 秒后可用, 就继续使用这个缓存, 不然不要
only-if-cached            当缓存中有副本存在时, Client 才再次获得一份缓存
no-transform              文档在发送之前不允许被转换

响应: Server 响应 Client 的请求

public             响应可以被任何服务器缓存
private            响应可以被缓存, 但只能被单个 Client 访问
no-cache           如果该报文被另一个 缓存 Server 所保存, 缓存 Server 必须要重新验证才能给 Client
no-store           响应不允许被缓存
no-tranform        响应在提供给 Client 之前, 不能做任何形式的修改
must-revalidate    响应在提供给 Client 之前, 必须要验证
proxy-revalidate   共享的缓存在提供给客户端之前必须重新向 Server 验证, 如果 Client 直接和 Server 连接可以忽略这个首部
max-age=484200     响应存活时间, Expires
s-maxage           响应存活时间, 仅对 public cache 生效

html 控制缓存

<meta http-equiv="Cache-Control" content="no-cache">

http-equiv 控制 3 秒后跳转

<meta http-equiv="refresh" content="3;url=http://www.baidu.com">

apache 控制缓存

来源: http://blog.csdn.net/21aspnet/article/details/6604814

mod_headers

<ifmodule mod_headers.c>
    <filesmatch "\.(html|htm|txt)$">
        header set cache-control "max-age=3600"
    </filesmatch>

    <filesmatch "\.(css|js|swf)$">
        header set cache-control "max-age=604800"
    </filesmatch>

    <filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
        header set cache-control "max-age=29030400"
    </filesmatch>
</ifmodule>

mod_expires

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault A0

    # 1 年
    <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
        ExpiresDefault A9030400
    </FilesMatch>

    # 1 星期
    <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
        ExpiresDefault A604800
    </FilesMatch>

    # 3 小时
    <FilesMatch "\.(txt|xml|js|css)$">
        ExpiresDefault A10800
    </FilesMatch>
</IfModule>

nginx 控制缓存

cache 控制

时间: 2024-10-14 14:43:55

http_cache的相关文章

Android开发之OkHttp3.4.x

android从4.4开始,HttpUrlConnection开始使用okhttp作为底层实现.实现原理如下图: 这篇博客简单说一下okhttp的使用.文字部分没有讲清楚的,可以查看代码里面的注释.首先看一下okHttp怎么工作的. 首先我们看看一个okhttp完整的网络访问,都涉及到了那几个类(这里先说核心类). 1.OkHttpClient: Call类的工厂,Call是用来发送网络请求和接收服务器响应的类.这个类实例可以设置拦截器,缓存大小,缓存目录,连接池等信息. 2.Request:是

Android 框架修炼-自己封装双缓存管理框架库

一.概述 Android开发中,网络请求是很重要的一部分,而缓存网络请求来的图片或者响应结果字符串或者结果流,既可以省流量,同时也可以帮助我们 解决无网或弱网情况下加载情况,当然也可以提升程序性能效率.纵所周知,缓存管理中肯定需要用到内存缓存,这里我们采用LruCache来管理内存的缓存. LruCahce虽然速度快,但是只是内存级别的缓存,为了实现持久化的缓存,我们还需要文件级别的缓存,也就是说我们要把缓存保存到文件,而文件则是保存 到手机存储或者SD卡存储中,即实现Disk级别的缓存,这里我

cache 控制

cache 控制 Table of Contents proxy cache (放在 http 段中) expire expires -1s 永远过期 expires 200s 缓存 200 秒 expires 30m 缓存 30 分 expires 2h 缓存 2 小时 expires 200s 相当于 Cache-Control: max-age=200 使用 cache-control, 如下 add_header Cache-Control max-age=200; 具体: http_c

chromium网络资源加载分析(三) 主资源加载逻辑分析 之body部分加载---chromium39

转载:请标注 from你吧吧 该blog我们来看看网页加载过程中,body部分的加载. 首先,先说明一下,无论是head部分还是body部分,最终的加载对象,都是通过HttpStreamParser对象和WebSocketBasicHandshakeStream对象来从网络上加载资源.这段逻辑没有在blog中标明,先声称下. 1. 接着上篇blog.上个blog中有这么一条: " 22. 方法ReadRawDataHelper中又会调用文件中url_request_http_job.cc方法:U

Symfony2学习笔记之HTTP Cache

富web应用程序的本质意味着它们的动态.无论你的应用程序多么有效率,每个请求比起静态文件来说总会存在很多的耗费.对于大多数web程序来说,这没什么. Symfony2非常的轻快,无论你做些严重超载的请求,每个请求将会得到很快的回复,而不会对你的服务器造成压力.但是随着你站点的成长,负载将成为一个严重的问题.对每个请求处理应该只被正常执行一次.这就是缓存真正要达成的目标. 站在巨人肩膀上的缓存:提高一个应用程序执行效率的最有效方法是缓存一个页面的所有输出然后让后续的请求绕开整个应用程序.当然,这对

nginx配置、反向代理缓存、负载均衡

一.nginx基本配置nginx开启文件目录浏览功能(web上显示目录) 1location / { 2 root /data/www/file //指定实际目录绝对路径: 3 autoindex on; //开启目录浏览功能: 4 autoindex_exact_size off; //关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b: 5 autoindex_localtime on; //开启以服务器本地时区显示文件修改日期! 6}php-fpm配置 1 location ~