2016-08-01 139 views
14

我已经用某些文件创建了s3存储桶。我以该S3存储桶为原点创建了CloudFront分配,并将状态更改为部署。AWS CloudFront在原产地为S3存储桶时返回http 307

当我蜷缩CloudFront的任何文件,我得到:

<Error><Code>TemporaryRedirect</Code><Message>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests.</Message><Bucket>MY-BUCKET</Bucket><Endpoint>MY-BUCKET.s3-eu-west-1.amazonaws.com</Endpoint><RequestId>...</RequestId><HostId>...</HostId></Error> 

当我卷曲我的S3存储的任何文件,我得到这个文件的内容。

我在做什么错?如何强制cloudfront缓存文件,以便客户端不需要直接从S3获取数据?

+0

当您收到部署的消息时,您是否立即尝试了Curl? – error2007s

+0

@ error2007s已部署超过3小时,但该消息仍然存在 – user3231055

+0

您的存储区在哪个区域?您在CloudFront分配中指定的存储桶端点是什么? –

回答

22

Thx Matt Houser从评论到我的第一篇文章!

似乎CloudFront在发布没有完全准备好时(但它在当时处于已部署状态,因此请小心!)将我的第一次请求缓存到文件中。我要求对缓存中的所有文件进行失效处理,这需要几分钟时间,但在失效完成后,所有文件都使用CloudFront url与http 200卷曲。从迈克尔 - sqlbot评论后

问题变得清晰:

所有铲斗至少有两个REST端点主机名。在欧盟西部-1, 他们是example-bucket.s3-eu-west-1.amazonaws.com和 example-bucket.s3.amazonaws.com。第一个将立即 当桶创建时有效。第二个 - 有时被称为 以作为CloudFront使用的“全局端点” - 不会,除非该存储桶位于我们的东1。在 秒的时间段内,按位置和其他因素变化,它也变成全球可访问的 。在此之前,307重定向是 返回。因此,水桶没有准备好。

+3

其实,这不是没有完全准备好的*发行版*。如果还没有准备好,它就不会起作用。 [这是*桶*没有准备好](http://docs.aws.amazon.com/AmazonS3/latest/dev/Redirects.html)。由于全局端点DNS的工作方式,当存储桶不在美国东部1区域时,临时重定向对于新存储区的前几分钟是正常的,有时会稍长一些。 CloudFront在缓存中提供的响应也具有“Age:”标头,这意味着您看到的内容已被缓存。 –

+0

@ Michael-sqlbot你在桶下意味着什么没有准备好?它正常卷曲,并不是在同一时间。 – user3231055

+1

所有存储桶至少有两个REST端点主机名。在欧盟西部1,他们是example-bucket.s3-eu-west-1.amazonaws.com和example-bucket.s3.amazonaws.com。第一个将在创建存储桶时立即生效。第二个 - 有时被称为“全局端点” - 这是CloudFront所使用的 - 不会,除非存储桶位于我们东部-1。在几秒到几分钟的时间内,由于位置和其他因素的变化,它也变得全球可访问。在此之前,307重定向被返回。因此,水桶没有准备好。 –