文档章节

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

© 著作权归作者所有

共有 人打赏支持
王潭不是王雨潭
粉丝 6
博文 19
码字总数 19745
作品 0
杭州
私信 提问
http协议常用功能整理之web缓存

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

落叶刀
2016/01/02
70
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

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部