2012-02-19 110 views
13

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

现在,现在从我的出身我把标题是这样的:

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头覆盖到硬编码的no-cache值,但我想知道是否有一种方法可以做到这一点源?

谢谢!

+1

为什么你想停止浏览器缓存内容? – 2012-03-05 14:47:31

+2

因为他希望浏览器在用户登录时重新下载页面。可能会让用户看到一个个性化的页面,而不是所有人都会得到的HTML页面。 – 2012-04-27 20:49:48

回答

1

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

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

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

19

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

发送我想缓存的页面的边缘控制头时,我总是在值前加上“!no-store”以确保Akamai缓存它。所以格式将是“!no-store,max-age = 1234”。

+0

相关用例 - https://community.akamai.com/thread/2704 – 2016-01-21 21:35:11