我目前使用Akamai作为我的应用的CDN,该应用在多个子域中提供。
我最近意识到Akamai正在缓存CORS请求,无论它们被请求的来源如何。
这当然会导致使用与缓存响应不同C:\Users\<username>\.gradle\native\jna\win32-amd64
的请求的客户端失败(因为它们对Origin
的响应标头不同于它们应该这样做)
许多人建议提供Access-Control-Allow-Origin
请求标头以避免此问题,但是according to Akamai's docs和this Akamai community post,这不是Akamai支持的。
如果请求中存在Vary: Origin
标头,我如何强制Akamai通过Origin
唯一地缓存内容?
答案 0 :(得分:1)
我做了一些研究,看来可以通过在Akamai配置中添加新的Rule
来完成,如下所示:
请注意,如果您这样做 - 请记住 - 这会更改您在Akamai的缓存密钥,因此以前缓存的任何内容都不再是CACHED了!此外,如黄色警告标签中所述,这可能会使用Akamai的网址清除工具强制重置缓存更加困难。如果您可以更改此规则适用的所有内容的缓存密钥,则可以删除If
阻止,并将Origin
标头包含为类似的Cache ID Modification
规则
简而言之,首先在您网站的一小部分尝试一下!
可以找到更多详细信息in this related post on Stack Overflow
答案 1 :(得分:1)
我们在Akamai上托管了一个API。我也有类似的要求,但我们想将Akamai上的缓存响应用于所有接触点。但是,如果没有CORS设置,它会先缓存第一个来源的响应,然后将其保存在缓存中,而其他接触点的以下请求由于缓存的来源标头而失败。
我们通过使用Akamai提供的API网关功能解决了该问题。您可以在“ API定义”下找到它。自定义缓存参数也可以在此处定义。请查看CORS设置的屏幕截图。现在,它从后端缓存了响应,并根据允许的来源列表将其提供给请求者。