HTTP缓存

通过HTTP协议可用的缓存选项的详细说明

缓存是一种可以帮助网络连接更快的技术,因为需要传输的内容越少越好。

许多资源可能非常大,并且在时间和检索的实际成本(例如在移动设备上)方面都非常昂贵。

HTTP提供了不同的缓存策略,浏览器使用了它们。

没有缓存

首先,Cache-Control标头可以告诉浏览器在不首先检查ETag值的情况下从不使用资源的缓存版本(稍后会详细介绍),方法是使用no-cache价值:

Cache-Control: no-cache

限制性更强no-store选项告诉浏览器(以及所有中间网络设备)甚至不将资源存储在其缓存中:

Cache-Control: no-store

如果Cache-Controlmax-age值,用于确定此资源作为缓存有效的秒数:

Cache-Control: max-age=3600

Expires标头

发送HTTP请求后,浏览器会根据您所需的URL检查它是否在缓存中具有该页面的副本。

如果存在,它将检查页面是否存在新鲜

如果页面是新鲜的HTTP响应Expires标头值小于当前日期时间。

Expires标头采用以下形式:

Expires: Sat, 01 Dec 2018 16:00:00 GMT

有条件的GET

有多种执行条件获取的方法。所有都是基于使用If-*请求标头:

  • 使用If-Modified-SinceLast-Modified
  • 使用If-None-MatchETag

使用If-Modified-SinceLast-Modified

浏览器可以向服务器发送请求,而不仅仅是请求页面,它还添加了一个If-Modified-Since标头,基于Last-Modified从当前缓存的页面获取的标头值。

这告诉服务器,如果自该日期以来资源已更新,则仅返回响应正文(页面内容)。

否则,服务器返回一个304 Not Modified回复。

使用If-None-MatchETag

Web服务器(取决于设置,页面的提供方式等)可以发送ETag标头

那是资源的标识符。每次资源更改(例如更新)时,ETag也应更改。

就像校验和。

浏览器发送一个If-None-Match标头包含一个(或多个)ETag值。

如果不匹配,则服务器返回资源的最新版本,否则返回304 Not Modified回复。


更多网络教程: