文档章节

http请求的缓存机制

王潭不是王雨潭
 王潭不是王雨潭
发布于 2017/09/04 09:25
字数 809
阅读 30
收藏 0
点赞 1
评论 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)更慢

© 著作权归作者所有

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

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

紫韵 ⋅ 2016/03/25 ⋅ 0

http之缓存的实现原理

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

ericSM ⋅ 2015/11/26 ⋅ 0

http协议常用功能整理之web缓存

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

落叶刀 ⋅ 2016/01/02 ⋅ 0

浏览器 HTTP 协议缓存机制详解

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

xrzs ⋅ 2015/01/19 ⋅ 15

HTTP缓存工作流程详解

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

wbf961127 ⋅ 2017/11/13 ⋅ 0

浏览器缓存 机制

浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的节点中加入...

web5 ⋅ 2014/05/29 ⋅ 2

ASP.NET性能优化之让浏览器缓存动态网页

上一篇《ASP.NET性能优化之构建自定义文件缓存》我们通过OutputCache,让请求去访问服务器asp.net的输出缓存,我们扩展了OutputCacheProvider,这相当于是访问服务器上的静态资源。OutputCac...

晨曦之光 ⋅ 2012/06/08 ⋅ 0

缓存机制笔记

浏览器端的缓存规则 新鲜度(过期机制):1)HTTP协议报头中带有完整的过期时间,并仍在有效内。 2)浏览器已经使用过缓存且在一个会话中检查过新鲜度 校验值(验证机制):浏览器再次请求,通过...

nswish ⋅ 2015/01/31 ⋅ 0

Ajax的缓存机制

Ajax的缓存机制和浏览器处理资源时的缓存机制是一样的。 三条简单规则: 只要是URL相同的GET请求,浏览器会使用缓存(当然还要看服务器的Cache-Control/Expires/Last-Modified/ETag头的设置)...

nswish ⋅ 2015/01/31 ⋅ 0

缓存(之一) 使用Apache Httpd实现http缓存

HTTP性能的问题与方案 一个最终用户访问一个网页,从浏览器发出请求,到接受请求,时间大体上消耗在了以下几个部分: 建立tcp/ip握手连接。 浏览器向服务器传送请求数据。 服务器处理数据。 ...

xpbug ⋅ 2014/03/28 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud构建微服务架构—创建“服务注册中心”

创建一个基础的Spring Boot工程,命名为eureka-server,并在pom.xml中引入需要的依赖内容: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par......

itcloud ⋅ 2分钟前 ⋅ 0

拖动

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <style> #box { width: 100px; height: 100px; background-color: aquamarine; position: absolute; } </style......

fyliujj ⋅ 5分钟前 ⋅ 0

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[objec......

球球 ⋅ 7分钟前 ⋅ 0

kibana启动异常

检查一下:kibana.yml 每一对key:value中,冒号之后应有空格。

增删改查1 ⋅ 9分钟前 ⋅ 0

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过...

HaierBrother ⋅ 9分钟前 ⋅ 0

Mysql

1.Jdbc Url 设置allowMultiQueries为true和false mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。 参数名称 参数说明 缺省...

瑟青豆 ⋅ 12分钟前 ⋅ 0

mysql导出导入表结构与数据

当我们需要进行数据迁移时,mysql自带的mysqldump会是最好的方式。 1.导出某张表的结构和数据 首先,我们应当使用服务器,打开终端,连接到所需要导出的表所在的服务器上。执行命令: mysqld...

hengbao5 ⋅ 13分钟前 ⋅ 0

世界杯也走向“比拼”大数据的时代

《日本经济新闻》6月19日报道称,俄罗斯足球世界杯已于6月14日揭开战幕。作为第21次举办的足球世界杯,如何活用大数据有可能成为决定各支球队胜负的重要因素。从对阵球队的分析到战术建议,还...

加米谷大数据 ⋅ 13分钟前 ⋅ 0

金额转为千分制,金额转中文大写

金额转关为大写 js /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = ['零', '壹', '贰', '叁', ...

YXMBetter ⋅ 16分钟前 ⋅ 0

开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

郑龙飞 ⋅ 21分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部