在应用程序中,我允许用户通过AWS SDK将文件上传到S3存储桶,并通过CloudFront CDN使其可用。 但是问题在于即使文件已经上传并准备就绪在S3存储桶中,它在CloudFront CDN URL上可用需要大约1或2分钟,这种情况是否正常?
CloudFront尝试实时从源服务器获取未缓存的内容。由于CloudFront是一个拉取式CDN,因此不存在“复制延迟”或类似问题。每个CloudFront边缘位置仅知道您网站的存在和配置;在收到请求之前,它不知道您的内容。当发生这种情况时,CloudFront边缘从源服务器获取所请求的内容,并根据需要将其缓存以便为后续请求提供服务。
这里发生的问题与一种称为“负缓存”的概念有关——缓存请求“不会”起作用的事实——通常是为了避免向缓存的任何内容的来源发送可能失败的请求。
默认情况下,当您的源返回HTTP 4xx或5xx状态代码时,CloudFront会将这些错误响应缓存五分钟,然后提交下一个对象请求到您的源,以查看导致错误的问题是否已解决并且所请求的对象现在可用。
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html
如果浏览器或其他任何东西在上传到S3之前尝试从特定的CloudFront边缘下载该文件,S3将返回错误,并且CloudFront - 在该边缘位置 - 将缓存该错误并记住在接下来的5分钟内不再尝试。
不用担心,这个计时器是可配置的,所以如果浏览器在您的控制范围之外进行此操作,您仍然应该能够解决它。
您可以为每个CloudFront缓存的4xx和5xx状态代码指定错误缓存持续时间 - 错误缓存最小TTL。有关详细信息,请参见配置错误响应行为。
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html
在控制台中配置此项::
查看分发配置时,请单击“错误页面”选项卡。根据您的评论,似乎谷歌浏览器影响了您的上传/预览策略: