笔者的一套适合 SAP UI5 开发人员循序渐进的学习教程里介绍了 SAP UI5 应用的开发步骤,运行这些应用后,在 Chrome 开发者工具 Network 面板里观察到一个请求的 Response Header 字段名称为 X-Cache-Akamai,值为 head,这代表 Akamai 内容分发网络(Content Delivery Network,CDN)的缓存状态信息。
本文详细解释这个 HTTP 头部字段的含义,并通过举例来说明。
-
Akamai 内容分发网络(CDN)简介:
Akamai 是一家全球领先的 CDN 提供商,它拥有分布在全球各地的服务器网络,用于存储和传送网站的内容。当用户访问启用了 Akamai CDN 的网站时,请求会被转发到距离用户最近的 Akamai 服务器,从而加快内容传输速度,提高网站性能和可靠性。 -
Response Header 中的 X-Cache-Akamai 字段:
当网站启用了 Akamai CDN 服务时,Akamai 服务器会在 HTTP 响应头部(Response Header)中添加一个名为 X-Cache-Akamai 的字段,用于提供有关请求的缓存状态的信息。 -
X-Cache-Akamai 字段的值:
X-Cache-Akamai 字段的值描述了 Akamai 服务器对于当前请求所采取的缓存处理方式。在你的例子中,字段值为 head,它是 Akamai 使用的一种缓存标记,用于表示此请求的响应头部已被缓存,但响应体尚未被缓存。
举例说明:
假设有一个名为 example.com 的网站启用了 Akamai CDN,并且用户在浏览器中输入网址 "http://example.com" 并访问该网站。
- 第一次访问:
- 用户首次访问该网站,浏览器发送一个请求到 example.com 的服务器。
- 由于这是用户首次访问,Akamai 服务器尚未缓存该网站的内容。
- 服务器将响应头部返回给浏览器,并在其中添加
X-Cache-Akamai: miss
,表示此请求的响应头部没有被缓存(miss
表示未命中缓存)。
HTTP/1.1 200 OK
Date: Wed, 27 Jul 2023 12:00:00 GMT
Server: Apache
X-Cache-Akamai: miss
- 第二次访问:
- 用户再次访问 "http://example.com"。
- 此时,Akamai 服务器已经缓存了上一次请求的响应头部。
- 服务器在响应头部中添加
X-Cache-Akamai: hit
,表示此请求的响应头部已经被缓存(hit
表示命中缓存)。
HTTP/1.1 200 OK
Date: Wed, 27 Jul 2023 12:05:00 GMT
Server: Apache
X-Cache-Akamai: hit
- 部分内容更新:
- 现在,"example.com" 网站的某些内容发生了更新,例如首页的一幅图片。
- 用户再次访问 "http://example.com",浏览器发送请求到 Akamai 服务器。
- 由于响应头部通常不会频繁变动,Akamai 服务器仍然使用缓存的响应头部,因此仍然返回
X-Cache-Akamai: hit
。 - 然而,由于响应体发生了变化,Akamai 服务器将在响应体中返回新的图片内容,并在响应头部中添加
X-Cache-Akamai: fresh
,表示响应体是新鲜的,因为它已经被更新。
HTTP/1.1 200 OK
Date: Wed, 27 Jul 2023 12:10:00 GMT
Server: Apache
X-Cache-Akamai: hit
- 强制刷新:
- 用户在浏览器中执行了强制刷新,或者按下了 Ctrl + F5 键,意图跳过缓存,获取最新的内容。
- 浏览器发送一个带有
Cache-Control: no-cache
请求头的请求到 Akamai 服务器。 - Akamai 服务器无视缓存,并向 example.com 的源服务器请求最新内容。
- 服务器返回全新的内容,并在响应头部中添加
X-Cache-Akamai: fresh
。
GET / HTTP/1.1
Host: example.com
Cache-Control: no-cache
HTTP/1.1 200 OK
Date: Wed, 27 Jul 2023 12:15:00 GMT
Server: Apache
X-Cache-Akamai: fresh
总结
当你在 Chrome 开发者工具的 Network 面板中看到一个请求的 Response Header 字段 X-Cache-Akamai
的值为 head
时,这表示 Akamai CDN 已经缓存了该请求的响应头部,但响应体可能没有被缓存。这个机制允许 Akamai CDN 更有效地处理请求,提高网站性能,并且在必要时通过请求源服务器以获取最新内容。