强缓存与协商缓存原理

前端开发中,强缓存和协商缓存是两种常用的缓存机制,用于提升网页加载性能和减轻服务器压力。

1. 强缓存:
强缓存通过设置响应头中的"Cache-Control"或"Expires"字段来实现。当浏览器首次请求资源时,服务器会返回带有缓存规则的响应头。浏览器接收到后,会将该资源缓存在本地,在下一次请求该资源之前不会向服务器发送请求。常见的强缓存指令有:
- Cache-Control:用于指定资源的缓存策略。常见的指令有:
  - max-age:指定资源在缓存中的最长时间(秒)。
  - s-maxage:类似于max-age,但仅适用于共享缓存(比如CDN)。
  - public:表示响应可以被任何中间服务器缓存。
  - private:表示响应只能被浏览器缓存,不能被中间服务器缓存。
- Expires:用于指定资源过期的时间,是一个绝对时间点(GMT时间)。如果同时存在Cache-Control和Expires,以Cache-Control为准。

2. 协商缓存:
当浏览器发起请求时,如果已经存在缓存资源,会携带上次请求时返回的缓存标识信息(如"Last-Modified"或"Etag")。服务器接收到请求后,会根据这些标识来判断资源是否有更新。如果资源没有变化,则服务器返回304 Not Modified状态码,响应中不携带实际的资源内容,浏览器则直接使用缓存的资源。如果资源有更新,服务器会返回新的资源和相应的缓存标识。常见的协商缓存字段有:
- Last-Modified:表示资源的最后修改时间。服务器响应中携带该字段。
- If-Modified-Since:表示上次请求时返回的最后修改时间。浏览器请求中携带该字段。
- Etag:表示资源的唯一标识符。服务器响应中携带该字段。
- If-None-Match:表示上次请求时返回的资源标识符。浏览器请求中携带该字段。

协商缓存相比强缓存更加灵活,可以准确地判断资源是否有更新。但与此同时,协商缓存增加了服务器的访问压力,因为每次请求都需要服务器判断资源是否有更新。

在实际应用中,通常会同时使用强缓存和协商缓存,以充分利用缓存机制来提升性能和减轻服务器压力。当强缓存条件不满足时,再使用协商缓存来判断资源是否有更新。

你可能感兴趣的:(缓存,github,java)