如何确保我的 CDN 按来源缓存 CORS 请求?
How to ensure my CDN caches CORS requests by origin?
我目前使用 Akamai 作为我的应用程序的 CDN,它在多个子域上提供服务。
我最近意识到 Akamai 正在缓存相同的 CORS 请求,无论请求来自何处。
这当然会导致使用与缓存响应不同的 Origin
发出请求的客户端失败(因为它们对 Access-Control-Allow-Origin
的响应 header 与他们应该的响应不同)
许多人建议提供 Vary: Origin
请求 header 以避免此问题,但是 according to Akamai's docs and this Akamai community post,Akamai 不支持此操作。
如果请求中存在 Origin
header,我如何强制 Akamai 通过 Origin
唯一地缓存内容?
我做了一些研究,看来这可以通过在您的 Akamai 配置中添加一个新的 Rule
来完成,如下所示:
请注意,如果您这样做 - 请记住 - 这会更改您在 Akamai 的缓存密钥,因此之前缓存的任何内容基本上不再缓存!此外,如黄色警告标签中所述,这会使使用 Akamai 的 url 清除工具强制重置缓存变得更加困难。您可以删除 If
块,并且只包含 Origin
header 作为类似的 Cache ID Modification
规则,如果您可以更改所有内容的缓存键的话规则适用于。
简而言之,先在您网站的一小部分上试用一下!
可以找到更多详细信息in this related post on Stack Overflow
我们在 Akamai 上举办了 API。我有类似的要求,但我们想对所有接触点使用 Akamai 上的缓存响应。但是如果没有 CORS 设置,它曾经缓存来自第一个来源的响应,然后将其保存在缓存中,并且来自其他接触点的后续请求由于缓存的来源头而失败。
我们使用 Akamai 提供的 API 网关功能解决了这个问题。您可以在 API 定义下找到它。也可以在此处定义自定义缓存参数。请查看 CORS 设置的屏幕截图。现在它缓存了来自后端的响应并根据允许的来源列表提供给请求者。
CORS Setting in API Definition
我目前使用 Akamai 作为我的应用程序的 CDN,它在多个子域上提供服务。
我最近意识到 Akamai 正在缓存相同的 CORS 请求,无论请求来自何处。
这当然会导致使用与缓存响应不同的 Origin
发出请求的客户端失败(因为它们对 Access-Control-Allow-Origin
的响应 header 与他们应该的响应不同)
许多人建议提供 Vary: Origin
请求 header 以避免此问题,但是 according to Akamai's docs and this Akamai community post,Akamai 不支持此操作。
如果请求中存在 Origin
header,我如何强制 Akamai 通过 Origin
唯一地缓存内容?
我做了一些研究,看来这可以通过在您的 Akamai 配置中添加一个新的 Rule
来完成,如下所示:
请注意,如果您这样做 - 请记住 - 这会更改您在 Akamai 的缓存密钥,因此之前缓存的任何内容基本上不再缓存!此外,如黄色警告标签中所述,这会使使用 Akamai 的 url 清除工具强制重置缓存变得更加困难。您可以删除 If
块,并且只包含 Origin
header 作为类似的 Cache ID Modification
规则,如果您可以更改所有内容的缓存键的话规则适用于。
简而言之,先在您网站的一小部分上试用一下!
可以找到更多详细信息in this related post on Stack Overflow
我们在 Akamai 上举办了 API。我有类似的要求,但我们想对所有接触点使用 Akamai 上的缓存响应。但是如果没有 CORS 设置,它曾经缓存来自第一个来源的响应,然后将其保存在缓存中,并且来自其他接触点的后续请求由于缓存的来源头而失败。
我们使用 Akamai 提供的 API 网关功能解决了这个问题。您可以在 API 定义下找到它。也可以在此处定义自定义缓存参数。请查看 CORS 设置的屏幕截图。现在它缓存了来自后端的响应并根据允许的来源列表提供给请求者。
CORS Setting in API Definition