广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >HTTP缓存原理介绍
  • 427
分享到

HTTP缓存原理介绍

http 2022-10-19 10:10:30 427人浏览 薄情痞子
摘要

这篇文章主要讲解了“Http缓存原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTP缓存原理介绍”吧!通过Internet获取资源既缓慢,成本又高

这篇文章主要讲解了“Http缓存原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTP缓存原理介绍”吧!

通过Internet获取资源既缓慢,成本又高。为此,Http协议里包含了控制缓存的部分,以使Http客户端可以缓存和重用以前获取的资源,从而优化性能,提升体验。虽然Http中关于缓存控制的部分,随着协议演进,有一些变化。但我觉着,作为后端程序员, 在开发WEB服务时,只需要关注请求头If-None-Match、响应头ETag、响应头Cache-Control就足够了。因为这三个Http头就 可以满足你的需求,并且,当今绝大多数的浏览器,都支持这三个Http头。我们所要做的就是,确保每个服务器响应都提供正确的 HTTP  头指令,以指导浏览器何时可以缓存响应以及可以缓存多久。

缓存在哪儿?

HTTP缓存原理介绍

上图中有三个角色,浏览器、Web代理和服务器,如图所示Http缓存存在于浏览器和Web代理中。当然在服务器内部,也存在着各种缓存,但这已经 不是本文要讨论的Http缓存了。所谓的Http缓存控制,就是一种约定,通过设置不同的响应头Cache-Control来控制浏览器和Web代理对缓 存的使用策略,通过设置请求头If-None-Match和响应头ETag,来对缓存的有效性进行验证。

响应头ETag

ETag全称Entity Tag,用来标识一个资源。在具体的实现中,ETag可以是资源的hash值,也可以是一个内部维护的版本号。但不管怎样,ETag应该能反映出资源内容的变化,这是Http缓存可以正常工作的基础。

HTTP缓存原理介绍

如上例中所展示的,服务器在返回响应时,通常会在Http头中包含一些关于响应的元数据信息,其中,ETag就是其中一个,本例中返回了值为x1323Ddx的ETag。当资源/file的内容发生变化时,服务器应当返回不同的ETag。

请求头If-None-Match

对于同一个资源,比如上一例中的/file,在进行了一次请求之后,浏览器就已经有了/file的一个版本的内容,和这个版本的ETag,当下次用 户再需要这个资源,浏览器再次向服务器请求的时候,可以利用请求头If-None-Match来告诉服务器自己已经有个ETag为x1323ddx的 /file,这样,如果服务器上的/file没有变化,也就是说服务器上的/file的ETag也是x1323ddx的话,服务器就不会再返回/file 的内容,而是返回一个304的响应,告诉浏览器该资源没有变化,缓存有效。

HTTP缓存原理介绍

如上例中所示,在使用了If-None-Match之后,服务器只需要很小的响应就可以达到相同的结果,从而优化了性能。

响应头Cache-Control

每个资源都可以通过Http头Cache-Control来定义自己的缓存策略,Cache-Control控制谁在什么条件下可以缓存响应以及可 以缓存多久。 最快的请求是不必与服务器进行通信的请求:通过响应的本地副本,我们可以避免所有的网络延迟以及数据传输的数据成本。为此,HTTP  规范允许服务器返回一系列不同的 Cache-Control 指令,控制浏览器或者其他中继缓存如何缓存某个响应以及缓存多长时间。

Cache-Control 头在 HTTP/1.1 规范中定义,取代了之前用来定义响应缓存策略的头(例如 Expires)。当前的所有浏览器都支持 Cache-Control,因此,使用它就够了。

以下我来介绍可以再Cache-Control中设置的常用指令。

max-age

该指令指定从当前请求开始,允许获取的响应被重用的最长时间(单位为秒。例如:Cache-Control:max-age=60表示响应可以再缓 存和重用 60  秒。需要注意的是,在max-age指定的时间之内,浏览器不会向服务器发送任何请求,包括验证缓存是否有效的请求,也就是说,如果在这段时间之内,服务 器上的资源发生了变化,那么浏览器将不能得到通知,而使用老版本的资源。所以在设置缓存时间的长度时,需要慎重。

public和private

如果设置了public,表示该响应可以再浏览器或者任何中继的Web代理中缓存,public是默认值,即Cache-Control:max-age=60等同于Cache-Control:public, max-age=60。

在服务器设置了private比如Cache-Control:private,  max-age=60的情况下,表示只有用户的浏览器可以缓存private响应,不允许任何中继Web代理对其进行缓存 –  例如,用户浏览器可以缓存包含用户私人信息的 html 网页,但是 CDN 不能缓存。

no-cache

如果服务器在响应中设置了no-cache即Cache-Control:no-cache,那么浏览器在使用缓存的资源之前,必须先与服务器确认 返回的响应是否被更改,如果资源未被更改,可以避免下载。这个验证之前的响应是否被修改,就是通过上面介绍的请求头If-None-match和响应头 ETag来实现的。

需要注意的是,no-cache这个名字有一点误导。设置了no-cache之后,并不是说浏览器就不再缓存数据,只是浏 览器在使用缓存数据时,需要先确认一下数据是否还跟服务器保持一致。如果设置了no-cache,而ETag的实现没有反应出资源的变化,那就会导致浏览 器的缓存数据一直得不到更新的情况。

no-store

如果服务器在响应中设置了no-store即Cache-Control:no-store,那么浏览器和任何中继的Web代理,都不会存储这次相应的数据。当下次请求该资源时,浏览器只能重新请求服务器,重新从服务器读取资源。

怎样决定一个资源的Cache-Control策略呢?

下面这个流程图,可以帮到你。

HTTP缓存原理介绍

感谢各位的阅读,以上就是“HTTP缓存原理介绍”的内容了,经过本文的学习后,相信大家对HTTP缓存原理介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: HTTP缓存原理介绍

本文链接: https://www.lsjlt.com/news/81739.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HTTP缓存原理介绍
    这篇文章主要讲解了“HTTP缓存原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTP缓存原理介绍”吧!通过Internet获取资源既缓慢,成本又高...
    99+
    2022-10-19
    http
  • MySql 缓存查询原理与缓存监控和索引监控介绍
    查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节比较,仅完全一致才被认为相同。如下,这两条语句被视为不同的查询 SELE...
    99+
    2022-11-12
    MySql缓存查询 索引监控 缓存监控
  • HTTP缓存机制的原理
    这篇文章主要介绍“HTTP缓存机制的原理”,在日常操作中,相信很多人在HTTP缓存机制的原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTTP缓存机制的原理”的疑惑有所帮...
    99+
    2022-10-19
    http
  • http缓存技术的原理
    本篇内容主要讲解“http缓存技术的原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“http缓存技术的原理”吧!HTTP缓存实现的原理浏览器是如何知道使用缓存的,其实这都是通过http中,浏览...
    99+
    2023-06-05
  • 介绍SpringBoot 整合 Redis 缓存
    无法支撑这么大的数据访问量,redis使用的时候可以单独利用客户端引入jar包操作即可,实际项目中都是和框架进行整合的比较多,此处演示利用springboot整合1.首先导入使用Maven导入jar包...
    99+
    2023-06-02
  • PHPLaravel框架缓存操作介绍
    目录主要的缓存类型(驱动)设置缓存获取缓存数据检查缓存项是否存在删除缓存数据缓存辅助函数Laravel为不同的缓存系统封装了统一的API,缓存配置文件./config/cache.p...
    99+
    2022-11-13
    PHP Laravel缓存操作 PHP Laravel
  • windows7缓存文件位置介绍
    客户想要知道windows7缓存文件在哪里,这时候客户要开启电脑上的IE浏览器,随后打开浏览器的设置选项,接着点击Internet选项找到访问历史数据,点击查看问卷就能知道缓存文件在哪里啦,下列便是windows7缓存文件位置介绍,找到缓存...
    99+
    2023-07-18
  • MySQL 存储引擎 - InnoDB 实现原理介绍
    存储结构   内存结构 内存结构主要包括 Buffer Pool、Change Buffer、Adaptive Hash Index和 Log Buffer 四大组件 Buffer Pool 缓冲池,简称BP。BP以 Page 页为单位,...
    99+
    2023-10-04
    mysql 数据库
  • redis缓存的数据类型介绍
    这期内容当中的小编将会给大家带来有关redis缓存的数据类型介绍,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Redis缓存数据类型有5种,分别是String(字符串)、List(列表...
    99+
    2022-10-18
    redis缓存 数据类型 edi
  • PHP缓存技术的简单介绍
    本篇内容介绍了“PHP缓存技术的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php缓存技术的应用时相当普遍的,也许有些人还对这项技...
    99+
    2023-06-17
  • HTTP缓存的作用和规则简介
    本篇内容介绍了“HTTP缓存的作用和规则简介”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言HTTP 缓...
    99+
    2022-10-19
    http
  • Reactroutercacheroute实现缓存页面流程介绍
    目录一、背景二、参考方法三、react-router-cache-route的使用四、具体步骤一、背景 在开发中,从A页面跳转到other页面,再返回A页面时react-router...
    99+
    2023-01-10
    React router cache route React router cache route缓存页面
  • Spring的工作原理介绍
    本篇内容主要讲解“Spring的工作原理介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring的工作原理介绍”吧!spring原理内部最核心的就是IOC了,动态注入,让一个对象的创建不用...
    99+
    2023-05-30
    spring
  • chatgpt的算法原理介绍
    chatgpt的算法原理是基于GPT-3,先通过人工标注方式训练出强化学习的冷启动模型与reward反馈模型,最后通过强化学习的方式...
    99+
    2023-02-09
    chatgpt
  • xtrabackup介绍及备份原理
    1. Xtrabackup介绍xtrabackup就percona公司基于innodb公司的ibbackup(收费)实现的一个开源软件,完全覆盖了ibbackup的功能,而且完全免费,可谓是业界良心。xtr...
    99+
    2022-10-18
    xtrabackup innobackupex aba
  • mysql复制的原理介绍
    这篇文章主要讲解了“mysql复制的原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql复制的原理介绍”吧! 图中m...
    99+
    2022-10-18
    mysql
  • GoldenGate的基本原理介绍
    本篇内容介绍了“GoldenGate的基本原理介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是Go...
    99+
    2022-10-18
    goldengate
  • java跨平台原理介绍
    (1)c/c++是编译成对应平台,跨平台需要使用相应的编译器重新编译(2)java是将文件(.java)编译成字节码文件(.class),然后字节码在java虚拟机上解释成机器码(3)字节码(.class)文件不面向任何具体平台,只面向虚拟...
    99+
    2019-01-18
    java入门 java 跨平台
  • VueNextTick介绍与使用原理
    目录一、NextTick是什么定义理解为什么要有nexttick二、使用场景三、实现原理一、NextTick是什么 定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后...
    99+
    2022-11-13
    Vue NextTick Vue NextTick的作用
  • C++内存管理介绍
    目录1 smart_ptr概述1.1 RAII进制1.2 智能指针1.3 scoped_ptr1.4 scoped_array1.6 shared_array1.7 weak_ptr...
    99+
    2022-11-12
    C++内存管理 内存管理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作