返回

解密HTTP缓存的强大魔力

前端

实践带你了解--http缓存

HTTP缓存是提高Web性能的重要机制,它允许浏览器将来自服务器的响应存储在本地,以便后续请求可以从本地缓存中检索,而无需再次向服务器发送请求。HTTP缓存主要分为强缓存和协商缓存。

强缓存

强缓存不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的Network选项中可以看到该请求返回200的状态码,并且Size显示from disk cache或from memory cache。通常cache-control和Expires的属性进行配置。

协商缓存

协商缓存会在请求头中添加一些条件请求头,如If-Modified-Since或If-None-Match,向服务器询问资源是否发生变化,如果资源未改变,则服务器会返回304 Not Modified状态码,浏览器继续使用缓存中的资源;如果资源已改变,则服务器会返回200 OK状态码,并返回最新的资源。通常Last-Modified和ETag的属性进行配置。

配置HTTP缓存

HTTP缓存可以通过多种方式配置,包括:

  • Cache-Control: Cache-Control是一个HTTP头字段,用于控制浏览器和服务器之间的缓存行为。它可以指定资源的缓存时间、是否允许缓存等。
  • Expires: Expires是一个HTTP头字段,用于指定资源的过期时间。如果资源在过期时间之前请求,则浏览器将使用缓存中的资源;如果资源在过期时间之后请求,则浏览器将向服务器发送请求以获取最新的资源。
  • Last-Modified: Last-Modified是一个HTTP头字段,用于指定资源的最后修改时间。浏览器在发送请求时,会将这个时间作为If-Modified-Since请求头的一部分发送给服务器。如果资源在浏览器上次请求之后未发生改变,则服务器会返回304 Not Modified状态码,浏览器继续使用缓存中的资源;如果资源在浏览器上次请求之后发生改变,则服务器会返回200 OK状态码,并返回最新的资源。
  • ETag: ETag是一个HTTP头字段,用于指定资源的唯一标识符。浏览器在发送请求时,会将这个标识符作为If-None-Match请求头的一部分发送给服务器。如果资源在浏览器上次请求之后未发生改变,则服务器会返回304 Not Modified状态码,浏览器继续使用缓存中的资源;如果资源在浏览器上次请求之后发生改变,则服务器会返回200 OK状态码,并返回最新的资源。

总结

HTTP缓存是提高Web性能的重要机制,它允许浏览器将来自服务器的响应存储在本地,以便后续请求可以从本地缓存中检索,而无需再次向服务器发送请求。HTTP缓存主要分为强缓存和协商缓存。强缓存不会向服务器发送请求,直接从缓存中读取资源;协商缓存会在请求头中添加一些条件请求头,向服务器询问资源是否发生变化。HTTP缓存可以通过多种方式配置,包括Cache-Control、Expires、Last-Modified和ETag等。