web面试常问http缓存解析相关
目录
- 为什么要有http缓存?
- http缓存之 强制缓存
- http缓存之 协商缓存(对比缓存)
- 协商缓存中的资源标识
为什么要有http缓存?
1.当输入网址到加载出页面, 电脑会经过"CPU计算、网络请求、页面渲染"等一系列步骤;
2.“网络请求"是其中最不确定、最耗时的一个环节, 针对这个环节, 我们可以通过"减少网络请求的体积和数量”, 来更快加载出页面, 这是"缓存"存在的原因;
3.通过"缓存"可以实现"减少网络请求的体积和数量";
http缓存之 强制缓存
1.当第一次访问某个网站, 该网站后端如果认为请求的资源(css、js、图片等)应该被浏览器缓存下来
2.后端会在响应头中添加一个配置:
Cache-Control: max-age=12146545
(单位:秒)
3.当我们再次请求该网站时, 会直接从本地缓存读取资源, 不会向服务器请求缓存的资源
4.如果缓存资源过期了, 会从服务端请求所有资源, 并再次缓存加了配置项的资源
5.Cache-Control 的设置, 由后端开发决定, 不涉及前端, 当然也可以设置成不缓存: Cache-Control: no-cache
http缓存之 协商缓存(对比缓存)
1.协商缓存是服务端的一种缓存策略;
2.当第一次访问某个网站, 发送请求时, 服务器会返回资源和资源标识. 浏览器会把资源和资源标识都缓存下来;
3.当再次发送请求时, 会带上资源标识, 服务器会把请求中的资源标识, 和服务器中的最新资源标识, 作对比:
- 如果一致: 服务器只返回
304
, 浏览器会在缓存中直接获取资源(减少请求数据的体积); - 如果不一致: 服务器会返回
200
和请求的资源
及最新资源标识
(体积会相对大一些)
协商缓存中的资源标识
资源标识有两种, 发送请求时, 都是放在请求头中:
Last-Modified
: 资源上一次修改的时间
If-Modified-Since: xxxxx (键名和Last-Modified不一样)
ETag
: 资源对象的唯一字符串
If-None-Match: xxxx(键名和Last-Modified不一样)
优先级的问题
一般来说会优先使用 ETag , 因为 Last-Modified 的值只精确到 秒级
文件如果每隔一段时间都重复生成,但内容相同。
Last-Modified 会每次返回资源文件,即便内容相同。
但是Etag可以判断出文件内容相同,就会返回304,使用缓存
以上就是web面试之http缓存解析的详细内容,更多关于web面试http缓存的资料请关注我们其它相关文章!
相关推荐
-
浅谈HTTP 缓存的那些事儿
前言 HTTP 缓存机制作为 Web 应用性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系的基础环节,也是想要成为前端架构的必备技能. 缓存的作用 我们为什么使用缓存,是因为缓存可以给我们的 Web 项目带来以下好处,以提高性能和用户体验. 加快了浏览器加载网页的速度: 减少了冗余的数据传输,节省网络流量和带宽: 减少服务器的负担,大大提高了网站的性能. 由于从本地缓存读取静态资源,加快浏览器的网页加载速度是一定的,也确实的减少了数据传输,就提高网站性能来说,可能一两个用户
-
微信小程序单选radio及多选checkbox按钮用法示例
本文实例讲述了微信小程序单选radio及多选checkbox按钮用法.分享给大家供大家参考,具体如下: 1.单选:radio 实例: js: Page({ data : { radioId:"", loves:[ {id:1, name:"跑步" ,checked : 'true'}, {id:2, name:"篮球" }, {id:3, name:"足球" }, ] }, updataRadio:function(e){ v
-
http协议详解(超详细)
http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 2616.RFC 2616定义了今天普遍使
-
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
浏览器缓存 浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档. 所以根据上面的特点,浏览器缓存有下面的优点: 减少冗余的数据传输 减少服务器负担 加快客户端加载网页的速度 浏览器缓存是Web性能优化的重要方式.那么浏览器缓存的过程究竟是怎么样的呢? 在浏览器第一次发起请求时,本地无缓存,向web服务器发送请求,服务器起端响应请求,浏览器端缓存.过程如下: 在第一次请求时,服务器会将页面最后修改时间通过Last-Modifi
-
web面试常问http缓存解析相关
目录 为什么要有http缓存? http缓存之 强制缓存 http缓存之 协商缓存(对比缓存) 协商缓存中的资源标识 为什么要有http缓存? 1.当输入网址到加载出页面, 电脑会经过"CPU计算.网络请求.页面渲染"等一系列步骤; 2."网络请求"是其中最不确定.最耗时的一个环节, 针对这个环节, 我们可以通过"减少网络请求的体积和数量", 来更快加载出页面, 这是"缓存"存在的原因; 3.通过"缓存"可
-
Web面试常问回流reflow与重绘repaint原理及区别
目录 浏览器的渲染机制 回流 与 重绘 回流 导致回流的操作: 重绘 导致重绘的操作: 浏览器的渲染机制 1.浏览器采用两个引擎来处理页面的工作, 不同的浏览器使用的渲染引擎不一样 渲染引擎: Chrom和Safari使用"WebKit", Firefor使用"Geoko" js引擎 2.浏览器会把html解析成 DOM树, 把css解析成 CSSOM(CSS对象模型); 3.接着会把 DOM树 和 CSSOM, 结合产生 render tree(渲染树); 4.渲
-
面试官:怎么做JDK8的垃圾收集器的调优(面试常问)
看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在JDK8中有Serial收集器.Parallel收集器.CMS收集器.G1收集器这么几种收集器,需要根据实际硬件配置和业务需求进行选择调优. 如此浅显的回答,无法让面试官达到深入的要求,肯定不能满足面试官强烈的需求,果不其然面试官又追问到:如果是桌面应用,内存占用也就100MB,应该选择哪种垃圾收集器呢?我快速的回答:Serial收集器.看着面试官期待的眼神,我又详细
-
java面试常问的Runnable和Callable的区别
Runnable Runnable接口非常简单,就定义了一个方法run(), 实现Runnable接口的run方法就可以实现多线程 // 函数式接口 @FunctionalInterface public interface Runnable { public abstract void run(); } Callable 可能很多人都知道要想在多线程中获取异步返回值结果一般是用Callable和FutureTask接口来实现,但可能很多人都不知道其实Callable是依赖于Runnable的r
-
java锁synchronized面试常问总结
目录 synchronized都问啥? synchronized是什么? synchronized锁什么? synchronized怎么用? 结语 synchronized都问啥? 如果Java面试有什么是必问的,synchronized必定占据一席之地.初出茅庐时synchronized的用法,成长后synchronized的原理,可谓是Java工程师的“一生之敌”. 按照惯例,先来看synchronized的常见问题(在线Excel同步更新中): 根据统计数据可以总结出synchronize
-
面试常问:如何保证Redis缓存和数据库的数据一致性
目录 一.一致性 1.强一致性 2.弱一致性 3.最终一致性 二.redis缓存和mysql数据库数据一致性解决 1.方案一:采用延时双删策略 2.方案二:一步更新缓存(基于订阅Binlog的同步机制) 首先,我们先来看看有哪几种一致性的情况呢? 一.一致性 1.强一致性 如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存.这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大. 2.弱一致性 这种一致性级别约束了系统在写入成
-
10个Python面试常问的问题(小结)
概述 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的一段代码: class A(object): def show(self): print 'base show' class B(A): def show(self): print 'derived show' obj = B() obj.show() 如何调用类A的show方法了. 方法如下: o
-
java虚拟机JVM类加载机制原理(面试必问)
目录 1.类加载的过程. 1)加载 2)验证 3)准备 4)解析 5)初始化 2.Java 虚拟机中有哪些类加载器? 1)启动类加载器(Bootstrap ClassLoader): 2)扩展类加载器(Extension ClassLoader): 3)应用程序类加载器(Application ClassLoader): 3.什么是双亲委派模型? 4.为什么使用双亲委派模式? 5.有哪些场景破坏了双亲委派模型? 1)线程上下文类加载器 2)Tomcat 的多 Web 应用程序 3)OSGI 实现
-
SpringBoot服务监控机制原理解析(面试官常问)
前言 任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来说,监控都是必不可少的. 就目前而言,大部分微服务应用都是基于 SpringBoot 来构建,所以了解 SpringBoot 的监控特性是非常有必要的,而 SpringBoot 也提供了一些特性来帮助我们监控应用. 本文基于 SpringBoot 2.3.1.RELEASE 版本演示. SpringBoot 监控 SpringBoot 中的监控可以分为 H
-
Linux面试中最常问的10个问题总结
前言 如果你要去面试一个Linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了.这些都是比较基本的问题,大家要理解,不能光死记硬背. 1.如何查看系统内核的版本 这里有两种方法: 1) uname -a uname 这个命令是用来打印系统信息的, -a 可以打印系统所有信息,其中包含内核版本,比如我的版本号是3.10.0-957.21.3.el7.X86_64. 2) cat /proc/version 下面再补充一下各个数字和字母代表的含义: 3 表示主版本号
随机推荐
- ext监听事件方法[初级篇]
- vue中v-model动态生成的实例详解
- python生成IP段的方法
- AngularJS $injector 依赖注入详解
- 非jQuery实现照片散落桌子上,单击放大的LightBox效果
- js简单工厂模式用法实例
- javascript实现的样式表(CSS) 格式整理与压缩
- 使用命令行重启Windows服务器的方法
- IOS 自定义UICollectionView的头视图或者尾视图UICollectionReusableView
- JavaScript加强之自定义callback示例
- PHP中生成UUID自定义函数分享
- 在ASP编程中nothing代表什么意思?
- asp实现新评论自动发短信提示的代码
- WordPress 单页面上一页下一页的实现方法【附代码】
- 关于js遍历表格的实例
- NodeJS配置HTTPS服务实例分享
- Shell中取今天、昨天、前天的时间操作代码
- Mysql索引的类型和优缺点详解
- 一种求正整数幂的高效算法详解
- C#编程实现简易图片浏览器的方法