文档章节

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)更慢

© 著作权归作者所有

共有 人打赏支持
王潭不是王雨潭
粉丝 7
博文 19
码字总数 19745
作品 0
杭州
私信 提问
浏览器 HTTP 协议缓存机制详解

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

大数据之路
2015/01/19
0
16
http之缓存的实现原理

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

ericSM
2015/11/26
42
0
Android 网络(二)

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

紫韵
2016/03/25
50
0
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

没有更多内容

加载失败,请刷新页面

加载更多

ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
2
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
6
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
9
0
GPON网络故障处理手册

导读 为了方便广大网络工作者工作需要,特搜集以下GPON网络处理流程供大家学习参考。开始—初步定为故障—检查光纤状况—检查ONU状态--检查设备运行状态—检查设备数据配置—检查上层设备状态...

问题终结者
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部