如何确保我的CDN按来源缓存CORS请求?

时间:2018-03-21 17:31:54

标签: cdn akamai vary

我目前使用Akamai作为我的应用的CDN,该应用在多个子域中提供。

我最近意识到Akamai正在缓存CORS请求,无论它们被请求的来源如何。

这当然会导致使用与缓存响应不同C:\Users\<username>\.gradle\native\jna\win32-amd64的请求的客户端失败(因为它们对Origin的响应标头不同于它们应该这样做)

许多人建议提供Access-Control-Allow-Origin请求标头以避免此问题,但是according to Akamai's docsthis Akamai community post,这不是Akamai支持的。

如果请求中存在Vary: Origin标头,我如何强制Akamai通过Origin唯一地缓存内容?

2 个答案:

答案 0 :(得分:1)

我做了一些研究,看来可以通过在Akamai配置中添加新的Rule来完成,如下所示:

请注意,如果您这样做 - 请记住 - 这会更改您在Akamai的缓存密钥,因此以前缓存的任何内容都不再是CACHED了!此外,如黄色警告标签中所述,这可能会使用Akamai的网址清除工具强制重置缓存更加困难。如果您可以更改此规则适用的所有内容的缓存密钥,则可以删除If阻止,并将Origin标头包含为类似的Cache ID Modification规则

简而言之,首先在您网站的一小部分尝试一下!

可以找到更多详细信息in this related post on Stack Overflow

enter image description here

答案 1 :(得分:1)

我们在Akamai上托管了一个API。我也有类似的要求,但我们想将Akamai上的缓存响应用于所有接触点。但是,如果没有CORS设置,它会先缓存第一个来源的响应,然后将其保存在缓存中,而其他接触点的以下请求由于缓存的来源标头而失败。

我们通过使用Akamai提供的API网关功能解决了该问题。您可以在“ API定义”下找到它。自定义缓存参数也可以在此处定义。请查看CORS设置的屏幕截图。现在,它从后端缓存了响应,并根据允许的来源列表将其提供给请求者。

CORS Setting in API Definition