HTTP 缓存技术 - 认识缓存

简介: HTTP 缓存技术 - 认识缓存

HTTP 缓存技术 - 认识缓存

缓存技术出现在HTTP1.1当中,目的是尽可能的减少对于服务器进行请求。为了实现缓存技术,HTTP设计者在头部字段增加针对缓存的头部字段。HTTP 缓存有两种方式,强制缓存协商缓存

认识缓存

介绍具体的缓存技术之前首先我们先来认识一下HTTP中的缓存特点。

值得需要注意的是缓存是只对获取文件有效,从服务器上拿到文件然后放入本地缓存,下次再获取条件允许则从本地缓存区获取文件,这样可以减轻服务器压力。

缓存没有实际上并没有一套强制要求和限制,而是通过几个请求字段的配合,按照一定的判断流程控制。

HTTP1.1主要通过下面三个请求头部信息判定缓存:

  • Cache-Control:服务器可以返回此字段指定浏览器和中间缓存应该存活多久。
  • ETag:浏览器缓存过期的时候,通过Etag令牌检查文件是否出现改变。Etag是比对内容(文件哈希)对比差异。
  • Last-Modified:和Etag用途相同,但是它是基于时间的策略检查是否更改。

这三个字段基本囊括大部分HTTP缓存技术的应用场景。

缓存位置

缓存位置通常存在下面几种:

  • Service Work
  • Memory Cache
  • Disk Cache(常用)
  • Push Cache

Service Work

通常运行在浏览器的后台,主要功能是实现缓存,使用此组件需要请求协议为HTTPS,因为Service Work 本身会拦截请求,需要 HTTPS保证安全才能使用。

Memory Cache

内存中的缓存,主要是当前页面已经捕获的资源。比如图片,脚本等,这种方式要比Disk Cache 要快上非常多,但是注意这个缓存寿命非常短,一旦关闭Tab,内存会随着页面的关闭立马释放。

内存缓存中有一块重要的缓存资源是 preloader 相关指令,也是页面优化的手段之一,可以做到解析脚本和CSS文件的同时请求下一个资源。

Disk Cache

Disk Cache 存在于磁盘的缓存,读取虽然慢一点,但是可以实现持久化存储,并且容量比内存缓存要宽泛很多。

DISK CACHE的覆盖面在浏览器中占用比重很大,通常结合HTTP头部字段进行判断,如果跨站点下载文件,已经下载过的文件不会再次请求,而是直接从Disk Cache 获取。

如何判断缓存进内存还是进磁盘? 通常有两个依据:

  1. 如果是大文件,通常会进入磁盘当中进行缓存
  2. 如果是频繁访问的文件,也会放入磁盘

Push Cache

推送缓存是HTTP/2 新加入的内容,上面三种没有命中的时候才会尝试使用。它是会话级别缓存。一旦会话结束,也会释放缓存,生命周期只比内存缓存长一点点。

缓存过程

缓存的大致流程如下:

  1. 客户端发起HTTP请求访问浏览器缓存,浏览器不存在缓存,告知客户端。
  2. 客户端再次发起HTTP请求到原始服务器,原始服务器返回结果和缓存规则。
  3. 客户端再次发起请求,从浏览器的缓存中获取请求结果。

注意第一步是隐式处理的,但是可以在本地临时缓存文件中摸索导处理流程。缓存过程有两个要点:

  • 每次请求都会检查浏览器是否存在缓存标识,以及请求的缓存结果。
  • 如果没有特殊字段禁用缓存,缓存将会把请求结果和缓存表示存在浏览器缓存当中。

缓存判定主要依赖两项技术:强制缓存协商缓存,也是HTTP缓存技术的要点。将在下文进行进行介绍。

Pragma 头部

Pragma 于 HTTP1.0 中定义,单词含义叫做“编译指令”,几乎可以包含任何内容,目的是再给浏览器发送请求,但是主要的应用场景是缓存操控。

Pragma主要作用是保持 HTTP1.0 向后兼容,因为缓存技术是在HTTP1.1中才出现的。

比如让一些HTTP1.0的源服务识别客户端理解”无缓存“的请求头部。当缓存当中请求头部存在并且被理解时,Pragma 头部会被忽略掉。

Pragma 如果被发送,将会应用于所有的应用程序和客户端。如果存在HTTP1.1缓存技术的相关请求头部字段,在服务器可以识别的前提下,会优先解析HTTP1.1的请求头部,从而忽略Pragma头部。

但是这里介绍的所有内容内容都是 HTTP1.0 约定俗成的东西。HTTP1.0 本身不能算作标准,只能算作“草稿”,所以 Pragma 既没有明确规范,也没有可靠性,现在的网络环境这个字段基本不用了。仅仅是有可能的向后兼容场景中用到。

介绍这些内容,只是让大家知道点历史。

Pargma 头部使用方式

基本语法  Pragma: 1# pragma-directive 举例  Pragma: no-cache(实际上也是唯一取值)


相关文章
|
3月前
|
缓存 JSON 前端开发
超详细讲解:http强缓存和协商缓存
超详细讲解:http强缓存和协商缓存
|
28天前
|
存储 缓存 数据库
缓存技术有哪些应用场景呢
【10月更文挑战第19天】缓存技术有哪些应用场景呢
|
28天前
|
存储 缓存 运维
缓存技术有哪些优缺点呢
【10月更文挑战第19天】缓存技术有哪些优缺点呢
|
28天前
|
存储 缓存 NoSQL
保持HTTP会话状态:缓存策略与实践
保持HTTP会话状态:缓存策略与实践
|
1月前
|
存储 缓存 监控
HTTP:强缓存优化实践
HTTP强缓存是提升网站性能的关键技术之一。通过精心设计缓存策略,不仅可以显著减少网络延迟,还能降低服务器负载,提升用户体验。实施上述最佳实践,结合持续的监控与调整,能够确保缓存机制高效且稳定地服务于网站性能优化目标。
48 3
|
2月前
|
存储 缓存 NoSQL
解决Redis缓存击穿问题的技术方法
解决Redis缓存击穿问题的技术方法
73 2
|
2月前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
39 1
|
3月前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
1000 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
3月前
|
存储 缓存 NoSQL
【性能飙升的秘密】FastAPI应用如何借助缓存技术实现极速响应?揭秘高效Web开发的制胜法宝!
【8月更文挑战第31天】FastAPI是一个高性能Web框架,利用Starlette和Pydantic实现高效API构建。本文介绍如何通过缓存提升FastAPI应用性能,包括使用`starlette-cache[redis]`实现Redis缓存,以及缓存一致性和缓存策略的注意事项。通过具体示例展示了缓存的配置与应用,帮助开发者构建更高效的Web应用。
218 0
|
4月前
|
存储 缓存 算法
深入了解Memcached:缓存技术的利器
Memcached是一个开源的高性能分布式内存缓存系统,用于加速动态Web应用。它通过将数据库查询结果、API调用结果或其他数据缓存到内存中,减少对数据库的访问频率,从而提高应用的响应速度。本文详细介绍了Memcached的基本原理、架构、安装配置、使用方法、测试方法以及应用场景。通过Memcached,开发者可以有效提升Web应用的性能,减少数据库负载,改善用户体验。
60 5

热门文章

最新文章