在学习Swagger的时候刚开始使用Swagger3.x但是有些配置还是使用之前版本的,所以就一直报404,在查阅一些网上的资料后,(现在还不知道是版本配置问题)大多数都是让清除以下缓存,我知道怎么清除(平时的清除缓存一般指的是清除浏览器缓存),当然之前也零散的接触过一些关于缓存的知识,但是没有系统的整理过,今天就先来整理一些关于页面缓存的内容吧。
首先在查阅资料中会出现页面缓存和web缓存这两种前端的缓存!但是实际上,页面缓存只是web缓存中的一部分。
一、概念详解
Web 缓存是指一个 Web 资源(如 html 页面,图片,js,数据等)存在于 Web 服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的 URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个 URL 地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页。
页面缓存是Web缓存的一个特定应用,它专注于存储和复用整个网页的内容。当一个网页被首次请求时,服务器会生成该网页的内容,并且可能将这个内容的副本保存在缓存中。当下一次有用户请求同一网页时,如果缓存中的版本仍然有效,系统就可以直接从缓存中提供网页内容,而不需要重新执行页面生成的过程。
二、缓存的类型
页面缓存通常包含以下三种情况:
1、浏览器缓存
2、代理服务器缓存
3、CDN(内容分发网络)缓存
而web缓存在上述页面缓存的基础上还有以下几个缓存:
4、数据库缓存
5、应用层缓存
通常情况下浏览器缓存是最多的,一般所说的清除页面缓存说的就是清除浏览器缓存。
浏览器缓存:
浏览器缓存是指把用户曾经访问过的网页资源(如HTML、CSS、JavaScript文件、图片等)保存在本地计算机上的一种机制。当用户再次访问同一资源时,浏览器可以先从本地缓存中加载资源,而不必从网络上的服务器重新下载,这样可以加快网页的加载速度,减少带宽消耗,提高用户体验。浏览器缓存(Browser Caching)是为了加速浏览,浏览器在用户磁盘上对请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。
实际上就是,在页面第一次加载的时候,将加载出来的资源通过一种机制存储起来,在以后访问的时候不需要再去服务器中重新加载,减少加载所需的时长和对服务器的压力。但是就会存在一种问题,在服务器端已经修改了原来的资源,但是还没来得及更新缓存内容,导致与预期不同。但是这里需要说明的一点是,浏览器缓存并不是一直存在的,他会根据设置的策略进行自动的更新或清除。当然也可以手动的清除缓存。
代理服务器缓存:
代理服务器缓存是一种通过在代理服务器上存储资源副本来提高访问速度并减轻目标服务器负载的技术。当客户端请求访问某个资源时,代理服务器首先检查自己的缓存中是否已经保存了该资源的副本。如果有,就直接返回给客户端;如果没有,代理服务器会向目标服务器请求该资源,并将其保存在缓存中,然后再返回给客户端。这样,下次客户端再次请求相同的资源时,就可以直接从缓存中获取,而不需要再次向目标服务器请求。
CDN(内容分发网络)缓存:
CDN(内容分发网络)缓存是一种通过在地理位置分散的服务器上存储网站内容的副本来提高网站访问速度和性能的技术。当用户请求访问网站内容时,请求会被路由到最近的CDN节点,如果该节点缓存有请求的内容,则直接从该节点提供服务,否则请求会回源到原始服务器获取内容,并将获取的内容缓存到节点上以供后续使用。
说到页面缓存,就不得不提到我们的老朋友,cookie和session了,他们可以说是携带缓存的工具吧!下面就来详细聊一聊他们两个的区别和联系,在面试中也是经常会问到的问题了。
首先两者之间的区别我认为可以理解为是cookie作为前端而session作为后端
cookie
定义:Cookie是服务器发送到用户浏览器并保存在本地的小型数据片段。它是一个简单的键值对,用于存储用户的偏好、会话标识符或其他需要在多个页面请求中保持的信息。Cookie可以设置过期时间,当达到过期时间后,Cookie将被自动删除。就是说cookie相当于是后端在用户访问是给前端生成了一个身份令牌,在后面该用户再次访问时会携带这个cookie来作为身份识别的一种方式。
要点:
- Cookie数据是在服务器端生成的
- 服务器端生成Cookie之后通过响应消息头返回给浏览器
- 浏览器保存Cookie信息
- 浏览器以后访问服务器都会自动携带Cookie
- 服务器端可以从请求对象中读取Cookie信息
时效性:
**会话级:**保存在浏览器的内存中,只要浏览器开着就一直在。浏览器关闭的时候释放。这是默认情况。
**持久化:**保存在浏览器的硬盘中,此时必然是服务器端设定的过期时间。到过期时间时被释放。
局限性:
- 单个Cookie能够保存的数据非常有限
- 浏览器保存Cookie时,属于不同网站的Cookie的数量也是有限的
- 来自于同一个网站的Cookie也只能保存有限的个数(约20个)
- 用户随时可能删除浏览器端的所有Cookie
- 用户也可以禁用浏览器端的Cookie
建议:
- 不要在Cookie中保存太多数据
- 同一个域名下,Cookie保存的数量不要太多
- 不要过于依赖Cookie作为数据保存的手段
- Cookie主要是用来保存那些能够识别用户身份的数据
session
定义:Session是一种服务器端的会话技术,用于跟踪用户的状态。它允许服务器识别和存储用户的状态信息,如登录状态、用户偏好等。Session通常通过一个称为Session ID的唯一标识符来识别每个用户会话。也就是说每个页面有一个唯一标识的session来作为存储这个页面状态、信息的工具吧。
要点:
- Session是在服务器端创建的,用于跟踪用户的状态和会话信息。
- 一旦服务器创建了Session,它会生成一个唯一的Session ID来标识这个Session。
- 服务器通过设置Cookie的方式将Session ID发送给用户的浏览器。这个Cookie包含了Session ID,但不包含Session的具体数据。
- 浏览器接收到Session ID后,会将其保存在Cookie中。这个Cookie通常设置了与Session相同的生命周期。
- 浏览器在随后的每次请求中都会自动携带这个Session ID(通过Cookie),这样服务器就可以识别用户的会话。
- 服务器通过请求中携带的Session ID查找对应的Session数据,从而识别用户状态和会话信息。
- Session的实际数据(如用户信息、购物车内容等)存储在服务器端,而不是在客户端。
- Session可以设置过期时间,当用户活动超过这个时间没有请求时,Session会自动失效。
- 服务器可以根据需要主动销毁Session,例如用户注销时。
- 虽然Session ID通过Cookie传递,但Session数据存储在服务器端,相对来说更安全。
- 在分布式系统中,Session的管理更加复杂,需要考虑Session的共享和持久化。
- 由于Session数据存储在服务器端,随着用户数量的增加,服务器需要更多的内存来存储Session信息。
时效性:
- 会话级:Session可以设置为会话级,这意味着Session的生命周期与浏览器的会话相同。当用户关闭浏览器窗口或标签页时,会话级Session默认会结束。
- 持久化:Session也可以设置过期时间,即使用户浏览器保持打开状态,Session也会在服务器端设定的过期时间后自动结束。
局限性:
- 服务器资源:与Cookie不同,Session数据存储在服务器端,如果用户数量众多,会占用大量的服务器内存。
- 性能开销:每次用户请求都需要在服务器上查找Session,这可能会对服务器性能产生影响。
- 可扩展性:在分布式系统中,保持Session的一致性是一个挑战,因为需要确保用户请求总是路由到存储其Session的服务器。
建议:
- 因为Session占用服务器资源,所以不应该在Session中存储大量数据。
- 为了避免占用过多服务器资源,应该为Session设置合理的过期时间。
- 虽然Session存储在服务器端,但仍然不应该用来存储敏感数据,或者应该对数据进行加密处理。
- Session主要用于保存用户的登录状态、用户偏好等,用于在用户与网站交互时保持状态。
使用场景:
- 用户认证:用于跟踪用户的登录状态,如用户登录后,Session中可以存储用户的用户ID和权限信息。
- 个性化设置:存储用户的个性化设置,如界面主题、语言偏好等。
- 购物车实现:在电子商务网站中,Session可以用来存储用户的购物车信息。