gpt4 book ai didi

amazon-web-services - 告诉 CloudFront 仅缓存 200 个响应代码

转载 作者:行者123 更新时间:2023-12-04 14:23:29 25 4
gpt4 key购买 nike

是否可以将 Amazon CloudFront 配置为仅缓存 200 个代码?我希望它永远不会缓存 3xx,因为我想将它连接到带有 Lambda 的动态图像处理工具,该工具通过 S3 执行 307,如 https://aws.amazon.com/blogs/compute/resize-images-on-the-fly-with-amazon-s3-aws-lambda-and-amazon-api-gateway/ 所述。

最佳答案

除非您可以配置源以设置 Cache-Control,否则无法明确告诉 CloudFront 仅缓存 2XX 而不缓存 3XX。相应的 header - CloudFront 将 2XX 和 3XX 视为“成功”,并将它们视为相同。 (它仅对 4XX 和 5XX 有不同的规则,对于条件请求的 304 响应明显异常(exception)。)

在 S3 重定向的情况下,问题在于 S3 重定向规则不允许 Cache-Control要设置的标题。

但是,如果您正在设置 Cache-Control在 S3 中创建对象时正确地在对象上添加 header - 正如您应该的那样 - 那么您可能¹依赖 CloudFront 的 Default TTL设置完全解决问题,告诉 CloudFront 响应缺少 Cache-Control不应缓存 header 。这意味着设置 Default TTL到 0,当然需要 Minimum TTL也设置为 0,因为需要 minimum <= default。
Maximum TTL应保留其默认值,因为它用于缩短具有 max-age 的对象的 CloudFront 缓存时间。大于 Maximum TTL .您可能不想缩短 2XX 响应的可缓存性。

假设浏览器行为正确并且不缓存重定向(对于 307 或 302,它们不应该缓存),那么您的问题就解决了,因为 CloudFront 在此配置中的行为符合预期 -- 尊重 Cache-Control当它存在时,并且在它不存在时不缓存响应。

但是,如果您发现浏览器或其他下游缓存正在阻止您的重定向,您可能需要变得更加积极。

显式添加 Cache-Control 的唯一方法(或其他 header )在源不提供响应时将使用 Lambda@Edge。以下代码用作 Origin Response² 触发器,将添加 Cache-Control: no-cache, no-store, private (是的,这有点多余)对任何 3XX从源服务器收到的 HTTP 响应。如果有 Cache-Control header 出现在源的响应中,它将被覆盖。不会修改任何其他响应(例如 2XX)。

'use strict';

// add Cache-Control: no-cache, ... only if response status code is 3XX

exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;

if (response.status.match(/^30[27]/))
{
response.headers['cache-control'] = [{
key: 'Cache-Control',
value: 'no-cache, no-store, private'
}];
}

callback(null, response);
};

有了这个触发器,2XX 响应不会修改它们的 header ,但 302/307 响应将被修改,如图所示。这将告诉 CloudFront 和浏览器不要缓存响应。

¹ 可能......并不意味着 CloudFront 可能只是做正确的事情。 CloudFront 的行为完全符合预期。可能是指这是唯一需要的操作:您可能认为此解决方案就足够了,因为浏览器可能不会缓存重定向。像往常一样,浏览器行为是通配符,可能需要更积极地添加显式 Cache-Control header 以防止浏览器缓存重定向。

² 源响应触发器在响应被缓存(如果它们被缓存)并返回给查看器之前检查并可以修改响应的某些方面。修改或添加 Cache-Control流中此时的 header 将阻止将响应存储在 CloudFront 缓存中,并且还应阻止浏览器缓存。

关于amazon-web-services - 告诉 CloudFront 仅缓存 200 个响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46120996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com