什么是HTTP缓存:
HTTP缓存是一种机制,用于在网络通信中减少数据传输量和提高性能。它通过在客户端(如浏览器)和服务器之间缓存(存储)资源的副本,以避免重复的网络请求。
当客户端请求某个资源时,服务器通常会返回该资源的完整内容,并在响应中包含与缓存相关的标头信息。这些标头信息告知客户端如何缓存该资源。客户端会根据这些标头信息来判断是否需要缓存资源以及如何使用缓存。
HTTP缓存具有以下好处:
- 提高性能:通过缓存已请求的资源,可以减少网络往返时间和带宽消耗,从而显著提高网页加载速度和响应时间。客户端可以直接从本地缓存中获取资源,而无需每次都向服务器发送请求。
- 减少服务器负载:由于客户端可以从缓存中获取资源,服务器的负载将减少。这对于高流量的网站或API端点尤为重要,可以降低服务器的响应时间和资源消耗。
- 减少网络流量:通过缓存,可以减少重复的网络请求,从而减少数据传输量和网络流量。这对于有限的带宽和移动设备上的数据使用情况非常有益。
- 改善用户体验:快速加载的页面和资源可以提供更好的用户体验,减少等待时间和提高用户满意度。
Expires:
浏览器请求服务器, 服务器会在返回的时候增加一个缓存过期时间字段Expires, 浏览器拿到这个值的就决定这个资源是否过期.
Expires字段的时间是服务器返回的,但客户端对比的时候是用的自己本地的时间,可能会造成不一致,那这个缓存就不准确了,会出现很多问题.
Cache-control:
Cache-control准确的说是在HTTP1.1的时候引入的,他的作用是和Expires一致的,但是不同的是,他采用的是过期时长.
js
Cache-Control: max-age=3600
相比过期时间用过期时长就准确多了,除了max-age这个值外还有很多.
例如:
判断缓存的流程还是一样 只是根据的判断值不一样
强缓存:
就是在缓存没有过期的时候, 浏览器就可以直接决定使用缓存,就叫强缓存
协商缓存:
协商缓存故名思意就是有一个协商的过程,就是当缓存过期后,浏览器需要询问服务器,是否可以继续使用缓存,因为有一个协商的过程,所以叫做协商缓存.
如何实现协商的过程:
Last-Modified: 最后的修改时间
Last-Modified是以秒为级别记录的, 如果是一秒以内修改他是无感知的
Etag: 文件内容的唯一标识
总结:
-
Expires
(过期时间):Expires 是一个HTTP响应头,用于指定资源的过期时间。当浏览器请求一个资源时,如果该资源的过期时间未到达,浏览器可以从缓存中加载资源而不必向服务器发起新的请求。过期时间是一个具体的日期/时间值。 -
Cache-Control
(缓存控制):Cache-Control 是一个HTTP响应头,用于控制缓存行为。它可以指定缓存的方式、是否允许缓存以及缓存的有效期等。常见的Cache-Control指令包括:max-age、no-cache、no-store、public、private
等。 -
Last-Modified
(最后修改时间):Last-Modified 是一个HTTP响应头,用于指定资源的最后修改时间。当浏览器请求一个资源时,服务器会返回该资源的最后修改时间。如果浏览器具有该资源的缓存副本,并且最后修改时间与服务器上的相同,浏览器将从缓存中加载资源。 -
ETag
(实体标签):ETag 是一个HTTP响应头,用于指定资源的实体标签。实体标签是一个唯一的标识符,通常是资源的哈希值。当浏览器请求一个资源时,服务器会返回该资源的ETag。如果浏览器具有该资源的缓存副本,并且ETag与服务器上的相同,浏览器将从缓存中加载资源。