阻止Cloudflare缓存重定向

时间:2017-01-16 01:07:57

标签: redirect amazon-s3 cloudflare

我在这里有一个独特的情况。

我们有一个托管用户上传媒体的域(已经应用了图像操作)(usermedia.com)。媒体存储在Amazon S3存储桶中,Cloudflare位于此存储桶前面。

如果用户请求图片,他们可能会浏览到https://usermedia.com/my-image-resize-200-200.jpg

如果此图像存在,则会提供,否则Amazon S3会执行302重定向(通过路由规则)到https://app.com/generate/my-image-resize-200-200.jpg,生成已调整大小的图像,将其上载到S3,然后再将其重定向回{{3} 3}}。这次文件存在于S3中并被提供。

问题是当我们启用Cloudflare代理时 - 它会缓存重定向,因此如果媒体不存在,Cloudflare会陷入持续的重定向循环。我尝试过使用307重定向,但问题仍然存在。

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:0)

我有一个完全相同的设置和一些问题。我发现问题确实是clouldflare。当图像不存在时,S3返回307指向缩放器端点,这里的问题是cloudflare添加了缓存头(例如:cache-control:public,max-age = 691200),因为可能你已经在缓存选项卡选项Browser Cache Expiration set,所以当浏览器获得响应时它将缓存它(因为存在缓存控制头),因此下一个请求将从浏览器缓存中提供。

更新:

快速解决方案可能很简单。在cloudflare上将浏览器缓存过期设置为"尊重现有标头",这样cloudflare就不会添加使浏览器缓存响应的标头。如果您仍希望在本地缓存图像,只需在从调整大小脚本创建时直接在S3图像上设置缓存控制标题

navigator.push({
    screen: 'Test',
    sharedElements: [`image`],
    animationType: 'slide-horizontal',
    navigatorStyle
});

如果您有其他资源(例如css或javascript等),您可以从aws控制台为它们设置CacheControl标头,或者,如果您在某个文件夹中有它们,请说&#34 ; foo",你可以去Cloudflare,创建一个页面规则,并指示为" foo"下的所有文件设置浏览器缓存TTL。文件夹中。

我知道这是一个迟到的答案,但希望能帮助将来遇到同样问题的人

答案 1 :(得分:0)

目前我看到Cloudflare没有缓存307重定向。第一个查询:

first

第二次查询:

enter image description here

您可以在S3重定向规则中设置respose代码,如下所示:

<RoutingRules>
  <RoutingRule>
  <Condition>
    <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
  </Condition>
  <Redirect>
    <HostName>app.com</HostName>
    <HttpRedirectCode>307</HttpRedirectCode>
  </Redirect>
  </RoutingRule>
</RoutingRules>