文档章节

http请求的缓存机制

王潭不是王雨潭
 王潭不是王雨潭
发布于 2017/09/04 09:25
字数 809
阅读 33
收藏 0

客户端缓存和服务端缓存

  • 客户端缓存:既浏览器缓存,保存在本地的缓存,用户可直接从本地读取数据,大大加快请求时间
  • 服务端缓存:代理服务器缓存或反向代理服务器缓存(nginx),CDN也是一种缓存机制,将数据存储在CDN节点中,大大加快用户的访问返回速度

缓存机制

在客户端决定使用本地缓存

在HTTP响应头部定义该资源的缓存策略,包含 Expires和Cache-Control,在此处命中缓存时,返回状态为200(from catch)

Expires:
  • 代表资源到期时间,在此时间之前均可以直接从浏览器缓存取数据
  • 是http 1.0的策略,现在浏览器基本都是http1.1
Cache-Control:
  • Cache-Control比Expires的控制更加细致
  • 包含public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
  • public 表示响应可被任何缓存区缓存
  • private 只可单个用户的响应消息,不能被共享缓存
  • no-catch 在没有向服务器进行校验的情况下,不可用于后续请求
  • no-store 禁止缓存
  • max-age 当缓存策略为可缓存时指定缓存时间

跟服务端确认后使用本地缓存

Last-Modified/If-Modified-Since
  • HTTP响应头部定义Last-Modified,标示这个响应资源的最后修改时间
  • 之前的Cache-Control中的max-age过期时检验Last-Modified声明
  • 有Last-Modified(最后修改时间)声明则像服务器发请求,并带上If-Modified-Since(上次响应中Last-Modified的值)
  • 如果Last-Modified较新表示资源有修改,直接服务器中读取,响应200(OK);如果Last-Modified较旧,说明资源并没有修改,响应304,客户端从本地读取缓存。
Etag/If-None-Match
  • 与Last-Modified类似,用来标志资源的有效性
  • Etag在服务端设置,表示当前资源的版本。在响应请求时告诉客户端当前的版本
  • 之前的Cache-Control中的max-age过期时检验是否有Etag。如果有的话,再次向web服务器请求时带上头If-None-Match (上一次Etag的值)
  • 如果If-None-Match与Etag值一致说明资源未被改动,响应304,客户端从本地读取缓存。如果值不一样说明资源已经改动,返回200
Etag和Last-Modified的区别
  • Last-Modified标注时间,只能精确到秒级,如果一个资源在一秒内改变多次则无法识别
  • 有时文件被改动,但是内容不变,Last-Modified也会变
  • Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符

先说返回200(from catch)和304的区别

200(from catch): 表示直接从本地浏览器缓存中读取,没有和服务器进行交互。第一次请求该资源的时候设置Expires 或者 Cache-Control: max-age头表示浏览器可以缓存该资源,下次请求的时候该资源还未过期,则可以从浏览器缓存中读取。

304: 表示发送 "If-Modified-Since"请求到服务器,如果资源从上次请求到这次请求没有改变,则返回304。304的速度比200(from catch)更慢

© 著作权归作者所有

共有 人打赏支持
王潭不是王雨潭
粉丝 5
博文 19
码字总数 19745
作品 0
杭州
Android 网络(二)

四、HTTP缓存机制 1、缓存机制的优点 缓存可以减少网络请求次数,从而减少服务器压力 可以加快数据读取速度,优化用户体验 可以提供离线数据,在无网络的情况下,维持应用的正常使用 2、缓存...

紫韵
2016/03/25
50
0
http之缓存的实现原理

WEB缓存(cache)位于Web服务器和客户端之间。 缓存可由数据库端取出的k-v键值对服务端内存缓存(leveldb,redis等),也可对html页面,资源文本,文件方式客户端文件缓存 缓存会根据请求保存输出内容...

ericSM
2015/11/26
42
0
浏览器 HTTP 协议缓存机制详解

最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control、为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag,有时又...

大数据之路
2015/01/19
0
16
HTTP缓存工作流程详解

HTTP缓存工作流程详解 HTTP首部信息 request请求首部格式 method url version headers #通常需要跟主题之间有一空白行 host:www.test.com Access-Encoding:gzip rsponse 起始格式 HTTP协议本...

wbf961127
2017/11/13
0
0
http协议常用功能整理之web缓存

本部分内容整理于互联网 Web缓存: WEB缓存(cache)位于Web服务器和客户端之间。 缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓...

落叶刀
2016/01/02
70
0

没有更多内容

加载失败,请刷新页面

加载更多

实战讲解高并发和秒杀抢购系统设计

互联网特别是电商平台,阿里双11秒杀、还有12306春运抢票、以及平时各种节假日抢购活动等,都是典型的高并发场景。 这类场景最大的特征就是活动周期短,瞬间流量大(高并发),大量的人短期涌...

xtof
7分钟前
0
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
10分钟前
4
0
在Ubuntu安装和配置Sphinx

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。 在开始本指南之前,您需要: 一个Ubuntu 16.04服务器。 sudo的一个非root用户,您可以通过以下设置本教程 。 安装在服务...

阿锋zxf
19分钟前
0
0
Qt编写输入法V2018超级终结版

对于qt嵌入式linux开发人员来说,输入法一直是个鸡肋问题,要么不支持实体键盘同步,要么不能汉字输入,要么不支持网页输入等,这几年通过陆续接触大量的各种输入法应用场景客户,得到真实需...

飞扬青云
30分钟前
0
0
TypeScript基础入门之高级类型的多态的 this类型

转发 TypeScript基础入门之高级类型的多态的 this类型 高级类型 多态的this类型 多态的this类型表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的...

durban
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部