更新网站 图片缓存_关于浏览器缓存你知道多少

news/2024/5/9 1:06:49/文章来源:https://blog.csdn.net/weixin_39841610/article/details/111339161

分享一些实用或有意思的东西,发现代码之美。专注深度和最佳实践,希望打造的是一个高质量的公众号。

e95044b20e52559fc97d5a0d05b2a76f.png

在前端开发中,我们在提到性能优化的时候总会提到一点:合理设置缓存。我们该如何从这方面入手来考虑提高网站性能呢?

前言

我们都知道 HTML5 引入了应用程序缓存,可以在没有网络的情况下进行访问,同时,HTML5 还引入了 storage 本地存储。这些都属于应用缓存。

本篇文章主要内容是和浏览器缓存相关的,也可以说是 HTTP 缓存。

什么是浏览器缓存

MDN 上是这样解释浏览器缓存的:

A browser cache holds all documents downloaded via HTTP by the user ... without requiring an additional trip to the server.

意思就是,浏览器缓存保存着用户通过 HTTP 获取的所有资源,再下一次请求时可以避免重复向服务器发出多余的请求。

通俗的说,就是在你访问过一次某个网站之后,这个站点的文字、图片等所有资源都被下载到本地了,下次再访问该网站时判断是否满足缓存条件,如果满足就不用再花费时间去等待资源的获取了。

浏览器缓存的分类

一般来说浏览器缓存可以分为两类:

  • 强缓存
  • 协商缓存(对比缓存)

我们需要知道的是,浏览器在加载资源时,会先判断是否命中强缓存再验证是命中协商缓存

其它的的具体细节,稍后会展开来说。

强缓存

浏览器在加载资源时,会先根据本地缓存资源的 header 中的信息判断是否命中强缓存,如果命中则直接使用缓存中的资源不会再向服务器发送请求。

2fe562e85e6846c6fe9cd89f1476c121.png

从图中可以看出,强缓存一般是这样一个流程:

  1. 查看 header 头中的 Expire 和 Cache-control 来判断是否满足规则;
  2. 如果满足规则,就返回缓存的数据;
  3. 如果不满足规则,就向服务器发送请求;
  4. 服务器返回数据;
  5. 将新数据存入缓存。

所以我们主要就是关注 Expire 和 Cache-control 这两个字段。

Expire

同样地,我们看看MDN中如何解释这个字段:

The Expires header contains the date/time after which the response is considered stale.

这个字段包含了一个时间,过了这个时间,响应将会失效。

也就是说,Expire 这个字段表示缓存到期时间,我们来打开一个网站并查看 Response Header 看看这个字段:

Expires:Fri, 27 Oct 2017 07:55:30 GMT

可能在你查看这的时候发现时间不对啊,怎么都已经是过去了 ~

GMT 表示的是格林威治时间,和北京时间相差8小时。

上面的这个时间表示的是 2017年10月27日15:55:30。

通过设置 Expire 来设置缓存有一个致命缺点:

可以看出,这个是个绝对时间,也就是说,如果我修改了客户端的本地时间,是不是就会导致判断缓存失效了呢。

Cache-Control

既然不能设置绝对时间,那我就设置个相对时间呗。

在 HTTP/1.1 中,增加了一个字段 Cache-Control ,它包含一个 max-age 属性,该字段表示资源缓存的最大有效时间,这就是一个相对时间。

Cache-Control:max-age=600

这个表示的就是最大有效时间是 600s ,对的,它的单位是秒。

Cache-Control 除了 max-age 属性之外还有一些属性:

  • no-cache:需要进行协商缓存,发送请求到服务器确认是否使用缓存。
  • no-store:禁止使用缓存,每一次都要重新请求数据。
  • public:默认设置。
  • private:不能被多用户共享。

现在基本上都会同时设置 Expire 和 Cache-Control ,Cache-Control 的优先级别更高。

协商缓存

当强缓存没有命中的时候,浏览器会发送一个请求到服务器,服务器根据请求头中的部分信息来判断是否命中缓存。如果命中,则返回 304 ,告诉浏览器资源未更新,可使用本地的缓存。

a871461dda04d0f058fdbeaa112957e8.png

从图中可以看出,协商缓存一般是这样一个流程:

  1. 把资源标识,比如 If-Modify-Since 或 Etag 发送到服务器,确认资源是否更新;
  2. 如果资源未更新,请求响应返回的http状态为 304 并且会显示一个 Not Modified 的字符串,告诉浏览器使用本地缓存;
  3. 如果资源已经更新,返回新的数据;
  4. 将新数据存入缓存。

Last-Modified,If-Modified-Since

浏览器第一次请求资源的时候,服务器返回的 header 上会带有一个 Last-Modified 字段,表示资源最后修改的时间。

Last-Modified: Fri, 27 Oct 2017 07:55:30 GMT

同样的,这是一个 GMT 的绝对时间。

当浏览器再次请求该资源时,请求头中会带有一个 If-Modified-Since 字段,这个值是第一次请求返回的 Last-Modified 的值。服务器收到这个请求后,将 If-Modified-Since 和当前的 Last-Modified 进行对比。如果相等,则说明资源未修改,返回 304,浏览器使用本地缓存。

well,这个方法也是有缺点的:

  • 最小单位是秒。也就是说如果我短时间内资源发生了改变,Last-Modified 并不会发生变化;
  • 周期性变化。如果这个资源在一个周期内修改回原来的样子了,我们认为是可以使用缓存的,但是 Last-Modified 可不这样认为。

所以,后来又引入一个 Etag。

Etag

Etag 一般是由文件内容 hash 生成的,也就是说它可以保证资源的唯一性,资源发生改变就会导致Etag 发生改变。

同样地,在浏览器第一次请求资源时,服务器会返回一个 Etag 标识。当再次请求该资源时, 会通过If-no-match 字段将 Etag 发送回服务器,然后服务器进行比较,如果相等,则返回 304 表示未修改。

**Last-Modified 和 Etag 是可以同时设置的,服务器会优先校验 Etag,如果 Etag 相等就会继续比对 Last-Modified,最后才会决定是否返回 304。**

总结

当浏览器再次访问一个已经访问过的资源时,它会这样做:

  1. 看看是否命中强缓存,如果命中,就直接使用缓存了;
  2. 如果没有命中强缓存,就发请求到服务器检查是否命中协商缓存;
  3. 如果命中协商缓存,服务器会返回 304 告诉浏览器使用本地缓存;
  4. 否则,返回最新的资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_774376.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php+mysql动态网站开发,你还看不明白?

前言 可以说掌握这个pdf上的知识,面试问的基础知识无处左右,我凭借这个pdf拿下了OPPO/百度,京东,华为,美团,蚂蚁金服等互联网公司的offer。 下文中截图来源于朋友一个pdf版本的面经,把所以知识…

我的世界java版官方网站,讲的太透彻了

简介 基于SpringCloud(Hoxton.SR1) SpringBoot(2.2.4.RELEASE) 的 SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、自动代码生成、多存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发&#xff…

网站虚拟主机服务器选择,选择虚拟主机服务的六大要点

信息化的工作之一就是开设网站,而对大量小规模企业来讲,开设网站就涉及到虚拟主机的选择问题。这是一个看似简单,实际上却有不少“讲究”的工作。利用虚拟主机技术,可以把一台真正的主机分成许多“ 虚拟”的主机,它们之…

app 访问h5 如何截取_如何选择自适应网站建设?自适应网站建设的重要因素?...

如何选择自适应网站建设?自适应网站制作有何特点?自适应网站建设的重要因素?“自适应式网站”又被称为HTML5自适应式网站,自适应式网站做为欧美流行建站方式,现在正成为中国做网站的主导方向,越来越多做网站…

php 架构的网站 如何上传.sql文件到远程主机并用它部署数据库,技巧和诀窍: 如何上传一个.SQL文件到远程主机并且执行它来部署...

Tip/Trick: How to upload a .SQL file to a Hoster and Execute it to Deploy a SQL Database 【原文发表日期】 Thursday, January 11, 2007 12:20 AM 上个月 (英文),我讨论了新的(免费的)数据库发布向导,它是设计来充分简化在web主机环境中上传和部署…

3个月学会Java开发!mysql官方下载网站

前言 要相信,你现在所有的努力和付出都会在将来的某一天回报给你! 首先阿里巴巴作为国内互联网行业的领头羊,培养了一代又一代的IT技术人才,很多想进阿里这些互联网大厂的程序员看中的不仅仅是高薪丰厚的福利待遇,同样…

全自动化“视频网站”视频制作与发布的分布式系统介绍 - 支持 Bitrate Switching(类似Smooth Streaming)...

一、前言 从事视频后台开发工作已近三年,在掌握了必需的业务知识以及技术后,我思考着做出点成果,用来作为自己再就业时的简历或者前三个学年的主要成绩。本文我将就三大部分简单介绍这套系统的优势、特点,定能抛砖引玉&#xff1b…

5分钟搞定!java免费源码网站

一、前言 最近刚读完一本书:《Netty、Zookeeper、Redis 并发实战》,个人觉得 Netty 部分是写得很不错的,读完之后又对 Netty 进行了一波很好的复习(之前用 spring boot netty zookeeper 模仿 dubbo 做 rpc 框架,那时…

零基础个人网站搭建教程(一个完全的新人如何搭建自己的个人网站)

花了一整天时间写的。混迹网络多年,现在又是it圈的一员,大大小小的网站也都做过。所以今天我想详细的给大家来一篇:零基础个人网站搭建教程,动手能力强的同学应该看完就会了。 WordPress: WordPress是使用PHP语言开发的…

零基础,最完整的建站教程

授人以鱼不如授人以渔“,这篇文章演示一下如何使用网络上开源免费网站程序搭建网站,最后会完成一个WordPress博客网站的搭建,但是方法是通用的,你可以把WordPress换成其他的程序,比如社区论坛,电商网站等都…

在IIS中使用SSL配置HTTPS网站(转)

由于Windows系统的普及,很多中小企业在自己的网站和内部办公管理系统都是用默认的IIS来做WEB服务器使用。默认情况下我们所使用的HTTP协议是没有任何加密措施的,所有的消息全部都是以明文形式在网络上传送的,恶意的攻击者可以通过安装监听程序…

如何快速搭建个人网站

今日科技快讯针对近日坊间流传的“我们天天在看你的微信”一说,微信团队今天发表声明重申三条用户隐私原则:1、微信不留存任何用户的聊天记录,聊天内容只存储在用户的手机、电脑等终端设备上;2、微信不会将用户的任何聊天内容用于…

搭建个人网站教程:阿里云+WordPress

以下教程简单易懂,不需要复杂的环境配置即可完成个人网站的搭建。 Step1:购买阿里云的服务器 这里我选择了“轻量应用服务器”(如果是搭建个人网站,容量小一点就行,不需要太大),镜像选择&…

超详细搭建个人网站教程,附带各种常见报错解决方案。

文章目录前言解惑环节准备工作环境配置一、安装二、环境配置1.cnpm安装2.Hexo安装可能报错和问题:博客初始化1、博客搭建可能报错和问题:2、博客测试可能报错和问题主题更换可能报错和问题:部署到云端1、创建库2.配置本地3.安装插件4.部署云端…

超详细的网站搭建教程使用阿里云RDS和ECS搭建个人博客网站

今天讲一讲如何利用云数据库、云服务器、word press搭建博客网站 1、注册阿里云账号 2、购买云数据库RDS(MySQL) 3、购买云服务器ECS 4、配置数据库 5、配置服务器 6、部署LAMP环境【Apache、MySQL、PHP、wordpress】 1、注册阿里云账号 浏览器搜索阿…

分布式解决方案-解决网站跨域请求

1.什么是网站跨域 跨域原因产生:在当前域名请求网站中,默认不允许通过ajax请求发送其他域名。 两个项目之间使用ajax(前端类似后端的httpclient)实现通讯,如果浏览器访问的域名和端口与ajax请求访问的地址不一样的情况下,…

互联网公司都在用什么语言写网站后端?

2019独角兽企业重金招聘Python工程师标准>>> 豆瓣 python 淘宝 php 百度 php python 优酷 java php 谷歌 python youtube python facebook php wikipedia php twitter ruby 看来php和python平分秋色&…

开发高性能网站的web性能测试工具

开发高性能网站的web性能测试工具文章分类:Web前端 WEB性能测试工具主要分为三种,一种是测试页面资源加载速度的,一种是测试页面加载完毕后页面呈现、JS操作速度的,还有一种是总体上对页面进行评价分析,下面分别对这些工具进行介绍…

网站访问流程

(点击查看大图)网站的架构如上图所示,下面将分析从用户在浏览器输入访问一个域名,例如www.yy.com,到页面全部展示出来经过的所有流程。(1)用户在浏览器地址栏输入www.yy.com或者yy.com(2)此时系统将检查缓存(这里的缓存包括浏览器缓存、操作系…

60款高质量的网站模板免费下载(上篇)

您可能还喜欢 分享45款高质量的免费(X)HTML/CSS模板最新30佳精美 PSD 网站模板免费下载寻找网页设计灵感的27个最佳网站推荐60佳灵感来自大自然的网页设计作品欣赏分享100佳精美的作品集网站设计案例当你想快速制作出一个网站的时候,网站模板就非常有用了。学习网页…