强缓存和协商缓存是Web开发中常用的两种缓存策略
强缓存(Cache-Control和Expires):强缓存指的是在浏览器向服务器发送请求之前,直接从本地缓存中获取资源,而不去服务器验证资源是否过期。强缓存的判断依据是缓存响应头中的 Cache-Control 和 Expires 字段。
- Cache-Control 是HTTP/1.1的字段,通过设置不同的值来控制缓存策略。常见的值包括:
- public:表示响应可以被客户端和代理服务器缓存。
- private:表示响应只能被客户端缓存。
- max-age:表示资源在缓存中的最长有效时间,单位为秒。
- Expires 是HTTP/1.0的字段,表示资源的过期时间,是一个绝对时间。如果当前时间小于过期时间,那么就直接从缓存中获取资源。
协商缓存(Last-Modified和ETag):协商缓存是指浏览器在发出请求时,携带上次请求返回的响应头中的Last-Modified或者ETag字段,由服务器根据这些字段判断资源是否过期。如果资源没有发生变化,则服务器返回304状态码,告诉浏览器继续使用缓存中的资源;如果资源发生了变化,则服务器返回新的资源。
- Last-Modified 是响应头的字段,表示资源的最后修改时间。当浏览器再次请求该资源时,会在请求头中携带If-Modified-Since字段,将上次响应的Last-Modified值发送给服务器进行判断。
- ETag 是响应头的另一个字段,是一个由服务器生成的唯一标识符,代表资源的特定版本。当浏览器再次请求该资源时,会在请求头中携带If-None-Match字段,将上次响应的ETag值发送给服务器进行判断。
协商缓存相对于强缓存来说,提供了更精确的缓存控制,因为它不仅仅依赖于时间,还考虑到了资源内容的变化。而强缓存则能够更快地获取资源,减少了与服务器的通信次数。综合使用强缓存和协商缓存可以在优化Web性能的同时保证数据的实时性。