我有一个在 Akamai 上上传图像的应用程序。有时我们需要上传与之前同名的图片。当我这样做时,akamai 不会根据时间戳刷新边缘服务器上的图像。但是,如果我重命名图像并上传,我的更改会反映在所有边缘服务器上。
是否有任何 ESI 指令可用于确保刷新图像。我知道这将超出使用 CDN 的目的,但我需要在选定内容上使用此功能。
任何帮助或方向都会很棒。
我相信 akamai 支持 If-Modified-Since/ETAGs,它应该可以满足您的需求。简要查看文档,我发现以下项目符号应该对您有所帮助。
// 来自 Akamai 文档 //
确保您的源服务器正在发送指示对象版本的信息,以便边缘服务器可以在这些对象过期时发送条件 GET 请求。
如果文件自指定时间以来没有更改或指定的 ETag 值仍然匹配,请确保您的源服务器正确响应这些条件请求,并使用 304 Not Modified。
Cache-Control 和 Expires 标头指示浏览器是否缓存对象以及缓存对象的时间。但是当刷新一个过期的对象时,浏览器必须有指示对象版本的信息,它可以在有条件的 GET 请求中发送到服务器。
浏览器通常可用的特定于版本的信息可能包括(除其他外):
Last-Modified:如果浏览器在缓存对象时接收到带有对象的 Last-Modified 标头,则浏览器可以在刷新对象时发送 If-Modified-Since 标头,请求服务器在对象自指定日期,如果没有,则使用 304 Not Modified 响应。示例,在 HTTP 响应中收到:Last-Modified:Fri, 06 Feb 2009 00:08:43 GMT
ETag:ETag 是标识对象特定版本的唯一字符串。如果浏览器接收到带有该对象的 ETag 头,它可以在刷新对象时发送一个 If-None-Match 头,如果当前的 ETag 与请求中的 ETag 不匹配或响应 304,则请求服务器发送该对象如果是,则未修改响应。例如,在 HTTP 响应中收到: ETag: "4514b5-4824-4743e60ff96c0" 确保您的站点正在发送指示对象版本的信息,以便浏览器可以在这些对象过期时向服务器发送条件 GET 请求.
如果 Akamai EdgeSever 在缓存中有对象,它将为对象提供服务,而无需检查源。当您更改文件名时,EdgeServer 没有缓存中的对象,因为它将其视为一个新对象(EdgeServers 有一个缓存键的概念,它由文件名和其他一些东西组成。缓存键是EdgeServer 如何在缓存中定位对象)。
如果您更改源上的对象(例如,您更改文件的内容,但不更改文件名),并且边缘服务器在缓存中有对象,它将提供它而不检查源。
如果您需要更改文件,您可以通过内容控制实用程序使用清除机制。登录到 Web 控制面板,有一个 GUI 界面可以手动清除文件。或者,您可以使用 SOAP API。
如果您不断更改文件并且清除成为问题,您应该考虑更新您的配置。您可以为您的内容设置一个低 ttl(生存时间),或者您可以为内容设置一个 no-store,这将强制 EdgeServer 每次向您的源发出 If-Modified-Since 请求对象是请求。