14

我目前使用 Akamai 作为 CDN,但我注意到浏览器也在缓存内容。浏览器缓存图像/css/js 很好,但我想知道是否有办法不在浏览器上缓存,而是在 Akamai 中缓存。

现在,我现在从我的原点发送这样的标题:

Cache-Control: public, must-revalidate, max-age=300
Expires: Sun, 19 Feb 2012 19:04:30 GMT
Date: Sun, 19 Feb 2012 18:59:30 GMT

Akamai 尊重这些标头,但也将它们直接传回给用户。这使得浏览器实际上也缓存了内容。

这在大多数情况下都很有效,但我们也有一些 CDN 逻辑,如果用户有一个登录的 cookie,则绕过 CDN 缓存并直接进入源。

因此,如果假设未经身份验证的用户单击“登录”,则他们将通过登录过程发送并返回同一页面。即使 CDN 会从源请求此页面,浏览器实际上会再次请求相同的页面,并且看起来好像登录没有工作。

现在,我可以强制登录过程添加一个查询参数,如 ?l=1 或其他东西,但必须有更好的方法。

我很想看看 Akamai 是否可以将 Cache-Control 标头覆盖为硬编码的无缓存值,但我想知道是否有办法在源头做到这一点?

谢谢!

4

2 回答 2

21

Akamai 有一个名为“Edge-control”的标头,其格式与 Cache-Control 相同。您可以使用正的 max-age 指定 Edge-control,然后将 Cache-Control 设置为“no-cache, no-store”。这应该得到你想要的。

在为我想要缓存的页面发送 Edge-control 标头时,我总是在值前面加上“!no-store”以确保 Akamai 缓存它。例如,格式为“!no-store,max-age=1234”。

于 2012-05-25T20:18:34.983 回答
2

Akamai 确实提供了一种在 Akamai 服务器中设置不同缓存行为的方法,而不是通常的 Cache-Control: 和 Expires: 标头。您可以从源服务器传递自定义标头,Akamai 边缘服务器在将内容传递到浏览器时可以理解、遵守和剥离这些标头。此信息可在 Akamai 门户文档中找到。

在您的情况下,您希望根据用户是否登录来改变行为。您可以在将对象传送到浏览器以供登录用户使用时要求对象绕过缓存,或者您可以使用 cookie 值来修改缓存键(Akamai 服务器如何引用对象),但您可能需要在此处与 Akamai 交谈以寻求帮助。

您需要非常小心,以确保 Akamai 缓存的其他用户无法查看个性化内容。如果有疑问,请谨慎行事,不要让 Akamai 缓存对象。

于 2012-03-23T03:43:49.097 回答