2017-07-24 109 views
1

我们正在使用Amazon S3 + CloudFront来提供JSON文件。我们上传了两个文件,可以考虑为j1.json和j2.json。两个文件最初都在响应中响应了有效的CORS头文件,但是在j2.json上运行失效时,其头响应发生了变化,我们正面临着CORS问题。在S3存储设置Amazon S3 + CloudFront CORS问题

CORS权限 -

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>*</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

响应头为j1.json为j2.json

enter image description here

响应头 enter image description here

在这两个JSON文件同一个桶,但j2.json响应缺少这些头文件

Access-Control-Allow-Methods →GET 
Access-Control-Allow-Origin →* 
Access-Control-Max-Age →3000 

我们尝试删除并再次上传对象,它不响应响应中的CORS头。这个问题的可能原因是什么?以及如何解决它?

+0

清除浏览器缓存并尝试在其他浏览器中使用。发生这种情况时最可能的解释是文件的陈旧缓存副本 – sideshowbarker

+0

@sideshowbarker我们已经尝试了不同的浏览器,清除缓存和重新加载。同样从邮差也。到目前为止没有运气。 – RockStar

+2

将CloudFront分配配置为将访问控制请求头,访问控制请求方法和原始头信息转发到S3(在“缓存行为”中)?在邮递员测试时,您是否发送了“Origin:”标题(和其他标题)?你能显示网址吗? –

回答

3

在S3将返回正确的CORS响应头之前,它需要看到该请求是一个CORS请求。

CloudFront的,默认情况下,前锋少头原点越好,因为越少标题的由来需要,更好的缓存命中率将趋于(因为没有发送到起源任何头不能引起来源以改变其反应,因此对特定请求的所有响应预期不会改变,并因此可被缓存)。但是对于CORS请求,我们需要S3来查看一些特定的头文件,以便它能够做出相应的反应。

在缓存行为配置中,您需要将这3个请求标头白名单转发到原点。

Access-Control-Request-Headers 
Access-Control-Request-Method 
Origin 

此更改完成后,失效也可能适用。