无名草
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

前言
当有人访问一个网站时,该网站需要显示和运行的一切都必须来自某个地方。所有文本、图像、CSS 样式、脚本、媒体文件等都必须由浏览器检索才能显示或执行。您可以让浏览器选择从何处检索资源,这会对页面的加载速度产生很大影响。
浏览器第一次加载网页时,会将页面资源存储在 HTTP 缓存中。下次浏览器访问该页面时,它可以在缓存中查找先前获取的资源并从磁盘检索它们,这通常比从网络下载它们的速度快。
虽然 HTTP 缓存是根据 Internet 工程任务组(IETF) 规范标准化的 ,但浏览器可能有多个缓存,它们在获取、存储和保留内容的方式上有所不同。
当然,每个首次访问您页面的访问者都没有为该页面缓存任何内容。即使是重复访问者,HTTP 缓存中的内容也可能不多;他们可能已手动清除它,或将浏览器设置为自动清除,或使用控制键组合强制加载新页面。尽管如此,您的大量用户可能会重新访问您的网站,其中至少有一些组件已经缓存,这可能会对加载时间产生巨大影响。最大化缓存使用率对于加快回访速度至关重要。
HTTP 缓存的工作原理
浏览器发出的所有 HTTP 请求首先路由到浏览器缓存,以检查是否存在可用于满足请求的有效缓存响应。如果匹配,则从缓存中读取响应,从而消除网络延迟和传输产生的数据成本。
HTTP 缓存的行为由 请求标头和 响应标头的组合控制。在理想情况下,您可以控制 Web 应用程序的代码(将确定请求标头)和 Web 服务器的配置(将确定响应标头)。
缓存头
缓存头的两种主要类型, cache-control和 expires,定义了资源的缓存特性。通常, cache-control被认为是比 expires更现代和灵活的方法,但可以同时使用两个标头。
缓存标头应用于服务器级别的资源,通过识别资源或资源类型(例如图像或 CSS 文件),然后使用所需的缓存选项指定资源的标头来启用缓存。
缓存控制
缓存控制有许多选项,通常称为指令,可以设置它们来具体确定如何处理缓存请求。
no-cache:指定可以缓存内容,但如果是这样,则必须在为客户端提供服务之前对每个请求重新验证。这会强制客户端检查新鲜度,但允许它避免在资源未更改的情况下再次下载该资源。与no-store互斥。
no-store:表示内容实际上不能被任何主缓存或中间缓存以任何方式缓存。对于可能包含敏感数据的资源,或几乎肯定会随访问而变化的资源,这是一个不错的选择。与no-cache互斥。
public:表示内容可以被浏览器和任何中间缓存缓存。覆盖使用 HTTP 身份验证的请求的默认私有设置。与private互斥。
private:指定可能由用户浏览器存储但不能被任何中间缓存缓存的内容。通常用于用户特定但不是特别敏感的数据。与public互斥。
max-age:定义内容在必须重新验证或从原始服务器再次下载之前可以缓存的最长时间。
过期缓存
通过为某些类型的文件指定到期时间或到期时间来启用缓存,这告诉浏览器在从服务器请求新副本之前使用缓存资源的时间。expires 标头只是设置内容应该过期的未来时间。在那之后,对内容的请求必须返回到原始服务器。随着更新和更灵活的缓存控制标头,过期标头通常用作后备。
总结
缓存是一种可靠且简单的方式,可以提高页面加载速度,从而提高用户体验。它足够强大,可以允许特定内容类型的复杂细微差别,但足够灵活,可以在站点内容更改时轻松更新。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)