HTTP缓存机制
来源:互联网 发布:淘宝店铺收费吗 编辑:程序博客网 时间:2024/05/21 12:41
【原文地址 点击打开链接】
HTTP缓存是web开发中经常碰到的问题,但是之前虽然看过,那时候web开发刚开始做,概念有点儿模糊不清,所以重读了《HTTP权威指南》的缓存部分。这里对自己的理解做一下记录。
为什么要缓存
为什么要做缓存?如果你看到了这篇文章,其实心中肯定有了一个作缓存的需求和目标。缓存的目的无非就是提高用户体验,节省资源两方面。
- 提高用户体验:
从提高用户体验来讲,就是用户能够看到反馈的时间越短越好,速度越快越好。那么如何才能提高速度呢?当然是数据和用户越近越好,最好就在本地;还有就是网速越快越好,最好连接网络就能访问。我们都知道本地应用是最快的,因为所有的都在你的电脑里了,不需要再费劲去网上下载了。缓存的目的就是为了尽量完成这个工作而设计的。 - 节省资源:
这个怎么说呢,如果你要访问一个网站,第一次你肯定没有这些数据,但是如果访问后所有的数据都保存在了本地,或者离你很近的地方,就省得在网络的海洋漫游过来了,这当然就节省了不少流量,当然你的计费方式是按带宽来的,多少流量无所谓,可是对于提供网站服务的供应商来说这些都是白花花的银子啊,能剩就剩,节约每一个铜板
嘛。缓存的机制
这里只介绍基于HTTP协议的缓存。也许做web开发的都听过expires
,cache-control
,If-Modified-Since
等缓存控制的HTTP头,这些眼花缭乱的头真让让人头晕啊,到底他们之间是什么关系,写了那么多,但是缓存是不是生效了?怎么生效的啊?带着这些疑问我也仔细阅读了一下书里的内容。其实一幅图可以说明很多问题:
通过这个流程图我们可以看出有三个方向:
- 未找到缓存(黑色线)
当没有找到缓存时,说明我们本地并没有这些数据,这种情况一般发生在我们首次访问网站,或者以前访问过,但是清除过缓存后。这时浏览器没有这些数据,浏览器就会先访问服务器,然后把服务器上的内容取回来,内容取回来以后,就要根据情况来决定是否要保留到缓存中了。这个地方与cache-control
字段的内容有关系。 - 缓存未过期(蓝色线)
缓存未过期,指的是本地缓存没有过期,不需要访问服务器了,直接就可以拿本地的缓存作为响应在本地使用了。这样节省了不少网络成本,提高了用户体验过。这个内容跟expires
字段和cache-control
有密切的联系。 - 缓存已过期(红色线)
缓存过期,是根据expires
和cache-control
来判断的,当满足过期的条件时,会向服务器发送请求,发送的请求一般都会进行一个验证,目的是虽然缓存文档过期了,但是文档内容不一定会有什么改变,所以服务器返回的也许是一个新的文档,这时候的HTTP状态码是200,或者返回的只是一个最新的时间戳和304状态码。
下面就针对这些情况和其对应的字段及字段的优先级进行性说明:
第一优先级cache-control
(expires)。下面的表是从高到低的顺序优先级递减。
上面这些主要是在本地进行的,主要作用就是决定用本地缓存还是用远程服务器的资源。下面有要介绍的是新鲜度校验
阶段要用到的HTTP控制字段。
优先级: Etag > Last-Modified 也就是说如果有Etag,就用If-None-Match来验证,否者才能用If-Modified-Science验证.
基本上常用的HTTP缓存功能就是这些。下面介绍一下在Nginx服务器先如何配置及前端页面如何访问和查看。
怎么使用
由于现在Nginx用的比较广泛,我用的也是Nginx,所以这里只介绍nginx的配置,其他服务器请google之。
首先是expires
和cache-control
的配置,参看Nginx官方文档
0 0
- HTTP缓存机制--客户端缓存
- Http缓存机制
- iOS http缓存机制
- Http缓存机制
- 浅谈HTTP缓存机制
- Http中缓存机制
- 浅谈HTTP缓存机制!
- http 缓存机制
- http缓存机制
- 浅谈HTTP缓存机制!
- HTTP浏览器缓存机制
- http 缓存机制
- Volley HTTP 缓存机制
- Http缓存机制
- HTTP缓存机制
- HTTP缓存机制
- HTTP缓存机制
- Volley Http缓存机制
- 数字String转换成int
- 在iOS开发中怎么对单个.mm文件设置ARC编译选项
- 1.21
- golang 通过loginauth方式发送加密邮件
- JSP Form表单input元素不能提交
- HTTP缓存机制
- Xcode的插件来提高工作效率
- 银行卡二元实名认证
- 5分种让你了解javascript异步编程的前世今生,从onclick到await/async
- vue的简单语法
- Hibernate的二级缓存
- 网页设计基础知识
- 8月2日网易笔试8道编程题-java代码
- 响应式布局(Responsive Web Design)