在CDN中缓存但不在浏览器中缓存

时间:2012-02-19 19:05:16

标签: http-headers cdn http-caching akamai

我目前使用Akamai作为CDN,但我注意到浏览器也在缓存内容。浏览器缓存images / 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标头覆盖为硬编码的无缓存值,但我想知道是否有办法在源中执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:20)

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”。

答案 1 :(得分:1)

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

在您的情况下,您希望根据用户是否登录来更改行为。您可以要求当对象被传递到浏览器以供登录用户时,对象会绕过缓存,或者您可以使用cookie值来修改缓存键(Akamai服务器如何引用对象),但您可能需要在这里与Akamai联系寻求帮助。

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