1、概述

HTTP协议的缓存是通过6个报文头完成的,通过两层协商使web资源能够不那么频繁地在服务器与客户端之间传递,从而节约了流量,提高浏览速度。以从客户端到服务器的顺序,第一层协商为Cache-Control与Expires;第二层协商为Last-Modified与Etag。

2、相关的报文头

2.1 Cache-Control

请求/响应报文头,缓存控制字段,也就是用于给资源生命期,是http/1.1引入的属性。Cache-Control的取值可细分为两类,一类是对缓存有直接决定性的值,他们会导致后续的第二层协商被跳过,包括:no-store、public、private;另一类是类似Expires的值,只是规定了有效期,后续的第二层协商不受影响,包括no-cache、max-age=x、s-maxage=x。

Cache-Control的取值如下:

形如:

Cache-Control:max-age=0

2.2 Expires

响应报文头,代表资源过期时间,由服务器返回提供,是http1.0的属性,在与Cache-Control共存的情况下,优先级要低。Expires的功能基本与Cache-Control的max-age相似,但它是指定一个过期时间点,而Cache-Control的max-age是指定了过期前的秒数。

形如:

Expires:Fri, 10 Apr 2020 16:30:04 GMT

2.3 Last-Modified

响应报文头,资源最新修改时间,由服务器告诉浏览器。

形如:

Last-Modified:Mon, 23 Mar 2020 18:39:50 GMT

2.4 If-Modified-Since

请求报文头,与Last-Modified相对应,浏览器把服务器最后一次给的Last-Modified返回,服务器将以此进行对比,判断资源是否需要更新。

形如:

If-Modified-Since:Fri, 10 Apr 2020 14:45:24 GMT

2.5 Etag

响应报文头,资源内容唯一标识,由服务器告诉浏览器。

形如:

Etag:58b66ccbe349d0d931df877c00d8101d037243dc

2.6 If-None-Match

请求报文头,与Etag相对应,浏览器把服务器最后一次给的Etag返回,服务器将以此进行对比,判断资源是否需要更新。

形如:

If-None-Match:58b66ccbe349d0d931df877c00d8101d037243dc

3、 协商流程

以下假定资源已经获取过一次,并且运行在HTTP/1.1环境下,现在进行二次访问。

流程图如下:

说明:

  • 客户端是有可能因为缓存原因不向服务器发起任何请求的,图中200状态(from cache)就是这种情况。

  • 服务器根据回传的If-Modified-Since与Last-Modified比对,如果不同则说明这个文件修改过,需要更新。但在这种判断精度是秒,如果是一秒内的改动,就需要进一步对比回传的If-None-Match与ETag的值。

  • 服务器返回304的意思就是不需要重新获取新资源,直接使用本地缓存即可。

4、缓存多久合适

生存时间(TTL)指令告诉浏览器应该缓存某个资源多久,即Cache-Control或Expires的值。找到给定资源的最佳TTL值并没有完美的科学方法,只能凭经验给出一些指导原则。

指导原则:

  • 纯静态内容,例如图片或带版本的数据,可以在客户端永久缓存;

  • CSS/JS和个性化资源,缓存时间大约是会话(交互)平均时间的两倍;

  • 其他类型资源取决于新数据对旧数据的容忍极限。

5、浏览器操作对HTTP缓存的影响

6、缓存改进方案

  • md5/hash缓存:通过不缓存html,为静态文件添加MD5或者hash标识,解决浏览器无法跳过缓存过期时间主动感知文件变化的问题。

  • CDN缓存:CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

HTTP缓存相关知识介绍相关推荐

  1. 后端技术:消息队列MQ/JMS/Kafka相关知识介绍

    ?今天给大家分享消息队列MQ/JMS/Kafka相关知识介绍 1.消息队列介绍 首先举个收快递的栗子,传统的收快递,快递小哥把我们的快递送到我们的手里.他需要什么条件嗯? 快递小哥有时间送, 我们有时 ...

  2. pdh光端机相关知识介绍

    目前随着网络信息技术的发展,我们拥有了更加先进的技术运用技巧,其中一个就是pdh光端机的使用.我们自从使用了pdh光端机,对于信息的传输大大的打破了传统的信息传输的缺点.那么,作为一种新生的技术,相信 ...

  3. java窗口三栏布局_移动端的flex三栏布局的相关知识介绍(代码示例)

    本篇文章给大家带来的内容是关于移动端的flex三栏布局的相关知识介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 默认情况下先显示移动端,通过 @media 属性适配屏 ...

  4. 活塞运动c语言编程,动网格的相关知识介绍

    记:在学习使用Fluent的时候,有不少朋友需要使用动网格模型(Dynamic Mesh Model),因此,本版推出这个专题,进行大讨论,使大家在使用动网格时尽量少走弯路,更快更好地掌握:也欢迎使用 ...

  5. LOD技术——定义详解及相关知识介绍

    LOD技术--定义详解及相关知识介绍 LOD技术(Level Of Detail)指用若干不同复杂度的模型来表示同一对象的技术.此技术主要根据视点距离对象位置的变化调用不同复杂度的模型,即在较远时调用 ...

  6. Web缓存相关知识整理

    一.前言  工作上遇到一个这样的需求,一个H5页面在APP端,如果勾选已读状态,则下次打开该链接,会跳过此页面.用到了HTML5 的本地存储 API 中的 localStorage作为解决方案,回顾了 ...

  7. 介绍php ppt,PHP相关知识介绍.ppt

    [摘要]PHP相关知识的介绍 1.什么是PHP PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写. PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入 ...

  8. 硬件知识:固态硬盘相关知识介绍

    今天就为大家全面科普一下固态硬盘的相关知识,让大家购买时做到心中有数,按需选择. 首先还是从SSD的结构来说起,SSD最基本的组成部件分为:主控芯片.闪存芯片.固件算法,下面我们分别阐述三者的工作职责 ...

  9. [Redis6]Redis相关知识介绍

    Redis介绍相关知识 端口6379 6379 是 "MERZ " 九宫格输入法对应的数字.Alessia Merz 是一位意大利舞女.女演员. Redis 作者 Antirez ...

最新文章

  1. 如何搭建并使用便携式 4G/LTE 伪基站研究移动安全
  2. Go语言从入门到精通 -【web项目实战篇】- Json详解
  3. HAProxy Keepalived L4-L7 高可用负载均衡解决方案
  4. 重构——71将领域和表述/显示分开(Separate Domain from Presentation)
  5. 移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程
  6. CSS3实现侧边栏快速定位的隐藏和消失
  7. android人脸情绪识别器,基于Android平台的人脸表情识别系统的设计与实现
  8. DDL 操作数据表 查询表
  9. git 无法提交空目录
  10. kubernetes英语怎么读_英语音标怎么读?如何从零基础英语音标入门英语口语学习...
  11. 布局时margin会影响父元素
  12. 被AI改变的风投模式:数据驱动使效率提高10倍
  13. STM32——SDIO进行SD卡读写测试
  14. WinDirStat – 硬盘空间都用在哪里了
  15. 英语句式参考纯享版 - 主语从句 - 表语从句
  16. TeXmacs 中文输入问题
  17. Evolutionary algorithm (遗传算法)介绍
  18. 手动释放Linux显卡显存
  19. 一文详解Pandas
  20. SQL Server基础操作(此随笔仅作为本人学习进度记录九!--游标)

热门文章

  1. mysql+phpmyadmin配置流程
  2. C#:把dll封入exe中方法
  3. linux awk f,linux的awk详情(上)
  4. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波10 - 直方图处理 - 局部直方图处理
  5. vue 筛选组件_记一个复杂组件(Filter)的从设计到开发
  6. 74HC595芯片使用说明
  7. 虚拟机中centos安装gcc
  8. Fragment管理工具类
  9. Spoken English(001)
  10. 编制网站首页的基本原则